在脚本标记中使用 Json 键时,它们未定义
2017-09-30
216
我一直尝试使用 Ajax GET 请求加载某些 Json,然后对其进行解析。
但是,当尝试从 HTML 脚本标记访问 Json 键时,它未定义。
为了调试此问题,我在控制台中记录了 Json 的所有键以及 Json 本身。因此我使用了此功能:
function getInv() {
$.get( "/inventory/", function( data ) {
var invList = data.split(",, "); // Explanation is below
console.log(invList[0]) // Just testing with first object
console.log(Object.keys(invList[0]));
});
}
getInv();
data.split(",, ") 的用途
由于我的后端脚本使用不同的编程语言,因此我必须将其解释为适合 Javascript 的语言。
还有多个 Json 对象,因此我用
",, "
将它们分隔开,然后在 Javascript 中拆分它们以创建一个 Json 对象列表。
调用该函数后,出现以下输出:
不过有趣的是,在控制台中粘贴 Json 对象后,如下所示:
这是输出:
所以基本上,在脚本标签中,我无法访问对象的键,尽管一旦我在控制台中手动使用它,就可以访问所有键。
这背后的目的是什么?给出不同的输出似乎很奇怪。也许
invList[0]
在脚本标签中根本不是 Json 对象?谢谢!
1个回答
data.split()
返回的是字符串数组,而不是对象。您需要使用
JSON.parse()
将 JSON 字符串解析为相应的对象。
function getInv() {
$.get( "/inventory/", function( data ) {
var invList = data.split(",, ");
console.log(invList[0]) // Just testing with first object
var obj = JSON.parse(invList[0]);
console.log(Object.keys(obj));
});
}
您可以使用
.map()
来解析所有这些,然后您将获得一个如您所期望的对象数组:
var invList = data.split(",, ").map(JSON.parse);
Barmar
2017-09-30