【问题标题】:JSON data to javascript Array Android browser .length gives wrong valueJSON数据到javascript数组Android浏览器.length给出错误值
【发布时间】:2015-04-12 12:30:25
【问题描述】:

来自 URL 的我的 JSON 数据:

[ { "url": "http://google.com" }, { "url":"http://yahoo.com" } ]

这将带来一个 URL 列表

jsOnData.push(xhr.response);

jsOnData.length 将返回 1 jsOnData[0][0].url 将返回第一个 url jsOnData[0].length 将返回 2 但在 Android 4.4.4 默认浏览器中,它是异常值并且无法按预期工作。在桌面浏览器和移动 Chrome、Opera、Firefox 中,它按预期工作。但是Android浏览器,UC WEB,Dolphin都打不开,也重新调出同样的异常值。

异常值:101(Android浏览器、UC WEB & Dolphin)

从 JSON 文件中获取 url 列表并将其解析为普通 JavaScript 数组的最佳方法是什么?

【问题讨论】:

  • 而且你忘了说那个异常结果是什么......
  • 它是 101 @MatíasFidemraizer
  • 嗯,101...你确定吗? ...
  • @MatíasFidemraizer 在所有 3 个浏览器中都支持

标签: javascript json


【解决方案1】:

我认为您对 JSON 是什么有误解。 JSON 是字符串而不是对象,因此它是 JavaScript Object Notation 的缩写。你想要的通俗地称为 POJO 或 Plain Old Javascript Object。它们是不同的。

在某些浏览器上,您用来发出 HTTP 请求的任何东西似乎都将 JSON 响应自动解析为 POJO,而在其他浏览器上则没有。

var json = '[{"url":"http://google.com"},{"url":"http://yahoo.com"}]';
json.length // 56 (this is the character count since json is a string)
var obj = JSON.parse(json);
obj.length // 2 (since there are two items in the array
obj[0].url // 'http://google.com'

更新:在与 OP 讨论后,他的问题是在他的 XMLHttpRequest 处理程序中缺乏对 responseType 的支持(这是第 2 级增强,因为有问题的浏览器仅支持第 1 级)。添加了以下检查以查看响应是否自动解析为对象,如果没有则手动执行:

var obj = typeof xhr.response === 'string' ? JSON.parse(xhr.response) : xhr.response;

【讨论】:

  • 当我尝试解析时出现错误“Uncaught SyntaxError: Unexpected token o”
  • JSON.parse 需要一个字符串而不是一个对象。这是在浏览器上得到奇怪的结果吗?您是否发布了整个返回的对象?
  • 这是我的 JSON 文件 [ { "url": "google.com" }, { "url": "yahoo.com" } ]
  • 但是返回给浏览器的是什么?你能注销整个对象吗?另请注意,这是无效的 JSON。你不能在有分号的地方有分号。
【解决方案2】:

使用 concat 而不是 push,因为您将一个数组添加到另一个数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2018-07-07
    • 2011-12-18
    • 2016-12-20
    • 2013-11-08
    相关资源
    最近更新 更多