开发者问题收集

在脚本标记中使用 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 对象列表。

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

enter image description here

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

enter image description here

这是输出:

在此处输入图片描述

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

这背后的目的是什么?给出不同的输出似乎很奇怪。也许 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