-1

我正在尝试使用 JQuery 解析一些从 AJAX 调用返回的 JSON。它似乎无法解析,JSLint 还说它是无效的 JSON。

但是,如果我直接创建对象,它可以工作并且我可以循环访问它 - 请参见下文:

var json = {layers:[{layer1:[17,16,15,14,12]}]}
alert(json)// <- This works and output object Object

var somestring = "{layers:[{layer1:[17,16,15,14,12]}]}"
var parsing = JSON.parse(somestring)
alert(parsing) // <- this doesn't and breaks on parse

// The below code will work provided the parsing is commented out

json.layers.forEach(function (outerObj)
{
    Object.keys(outerObj).forEach(function (key)
    {
        outerObj[key].forEach(function (item)
        {
            alert(item)
        });
    });
});

我正在努力弄清楚为什么它不会解析,但似乎可以工作。

编辑

我意识到通过引号括起来layerslayer1修复它,只是不确定为什么它以一种方式工作 - 但不是另一种。

4

3 回答 3

1

javascript 对象和 JSON 对象是有区别的,JSON 对象的所有键都必须被引用。

var somestring = "{layers:[{layer1:[17,16,15,14,12]}]}"// not a valid json to parse, it is a normal string, you can use JSON.stringify() to make it a valid json identifiable string.

所以正确的 JSON 字符串看起来像

var somestring = '{"layers":[{"layer1":[17,16,15,14,12]}]}';
var parsedJson = JSON.parse(somestring)
于 2018-11-11T18:48:01.530 回答
0

如果您更改sometring为以下某些示例,它将起作用。

var somestring = '{"layers":[{"layer1":[17,16,15,14,12]}]}'

var somestring = "{\"layers\":[{\"layer1\":[17,16,15,14,12]}]}"

基本上,这是 JSON 的指定方式。

有关更多示例,请查看w3schools

于 2018-11-11T18:39:03.897 回答
-1

最佳做法是JSON.stringify(Object)一方面使用,JSON.parse(String)另一方面使用。这将为您节省很多时间来为一些琐碎的细节挠头。

在您的示例中,您可以通过以下方式解决问题

var somestring = JSON.stringify(json)

但是,为了将来参考,必须引用 JSON 键,所以你somestring应该写成:

var somestring = '{"layers":[{"layer1":[17,16,15,14,12]}]}'

祝你好运!

于 2018-11-11T18:23:52.163 回答