Javascript 当从脚本标记使用Json键时,它们是未定义的

Javascript 当从脚本标记使用Json键时,它们是未定义的,javascript,json,Javascript,Json,我一直在尝试使用Ajax GET请求加载某些Json,然后对其进行解析 但是,当尝试从HTML脚本标记访问Json键时,它是未定义的 为了调试这个问题,我在控制台中记录了Json的所有键以及Json本身。因此,我利用了这个功能: function getInv() { $.get( "/inventory/", function( data ) { var invList = data.split(",, "); // Explanation is below c

我一直在尝试使用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();
数据的目的。拆分(“,”):

因为我的后端脚本使用不同的编程语言,所以我必须将其解释为适合Javascript的语言。 还有多个Json对象,所以我用
“,”
将它们分开,然后用Javascript将它们分开,以便创建一个Json对象列表

调用函数后,出现以下输出:

尽管有趣的是,在控制台中粘贴Json对象后,如下所示:

这就是输出:

所以基本上,在脚本标记中,我无法访问对象的键,尽管一旦我在控制台中手动使用它,所有键都可以访问


这背后的目的是什么?给出不同的输出似乎很奇怪。也许
invList[0]
在脚本标记中根本不是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);

您需要使用
JSON.parse()
“还有多个JSON对象,所以我用“,”分隔它们。。。什么?在你的后端脚本中,你不能把所有的对象放在一个数组中,然后把数组转换成JSON,而不是用
?@Andy Like
JSON.stringify(foo)+',+JSON.stringify(bar)+',+JSON.stringify(xxx)
控制台中
console.log(invList[0])
的输出显然是一个字符串。