我一直在尝试使用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]
在script标签中根本不是Json对象吗?谢谢! 最佳答案
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);