javascript - JSON数据到javascript数组Android浏览器.length给出了错误的值

标签 javascript json

来自 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 数组的最佳方法是什么?

最佳答案

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

似乎您用来发出 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 === '字符串' ? JSON.parse(xhr.response) : xhr.response;

关于javascript - JSON数据到javascript数组Android浏览器.length给出了错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589474/

相关文章:

MySQL加载数据到文件json数组

Python - 将特定键的 json 数据转换为 csv 格式

json - api 网关 CORS 设置

javascript - Parse.com 将云代码添加到 html 按钮

javascript - 如何使滚动条透明?

javascript - 如何隐藏未选择的选项

javascript - 如何在 Angular JS 中正确使用 ng-cloak?

javascript - 通过 Prop 传递功能后 react 和检查条件

java - 无法在 scala 中使用 jackson fastxml 将 json 数组反序列化为类对象

json - 无法将对象解码为 []uint8 类型的 Go 值