使用JavaScript进行JSON解析的最佳方法

5
可能是重复问题:JavaScript对象(即关联数组)的长度 我有以下格式的JSON数据。
[{"student":{"name" : "ABCD",
        "age":8,
        }
    "user":{ "firstName":"ABCD",
            "age": 9,
        }
        },
   {"student":{"name" : "XCYS",
        "age":10,
        }
    "user":{ "firstName":"GGG",
            "age": 11,
        }
},]

我尝试使用(data.student[i].length),但它没有起作用(只是为了查看对象的长度),我还尝试了(data.user[i]),但也无济于事。
我基本上很困惑,不知道如何获取JSON中一个对象的长度以及如何有效地显示它。我该怎么做?

https://dev59.com/QXVD5IYBdhLWcg3wWaVh - Dr. Dan
2
这不是有效的JSON,也不是有效的数组或对象文字 - 你缺少一些逗号。假设你修复了它,如何访问它取决于它是否实际上是JSON - 一个需要用JSON.parse(yourJSONhere)解析的字符串,或者像var data = [{"student":""}];这样的数组字面量,不是 JSON。鉴于你有一个数组,你需要像data[i].student这样的东西。 - nnnnnn
5个回答

2
你提出的问题中的内容无法解析为有效的JSON格式,因为所有键都需要用引号括起来(所以你应该使用"age": 11而不是age: 11)。对象中的所有键值对都应该用逗号分隔(所以你应该使用"firstName": "GGG", "age": 11而不是"firstName": "GGG" "age": 11)。此外,你在外部数组中还有一个尾随逗号。
只要你有有效的JSON格式,就可以在IE7之后的所有浏览器中使用JSON.parse(data)将字符串转换为实际的对象。一旦解析成对象,你可以使用:
var data = "your JSON string";
var object = JSON.parse(data);

console.log(object.length); // the number of objects in the array
console.log(object[0].student.name; // the name of the first student

如果您需要支持 IE7 及更早版本的浏览器,请查看 Douglas Crockford 的 JSON polyfill:https://github.com/douglascrockford/JSON-js。请注意,保留了 HTML 标签。

1
"Can I Use"有一个更完整的支持JSON的浏览器列表:http://caniuse.com/#feat=json - steveukx

1
假设您拥有的实际对象是有效的(没有缺失逗号等),并且已正确解析字符串,您正在尝试使用数组索引访问对象,反之亦然。 让我们从头开始重建对象:

首先,您拥有一个数组。

[]

您可以使用data[0]访问数组中的第一个元素。第一个元素是一个对象。

[
    {}
]

该对象有两个键,它们都包含对象。

[
    {
        "student": {},
        "user": {}
    }
]

您可以使用 data[0].student 访问 student 键。它包含一个具有两个键的对象。

[
    {
        "student": {
            "name": "ABCD",
            "age": 8
        },
        "user": {}
    }
]

您可以使用以下代码获取该对象中的值数量:

Object.keys( data[0].student ).length;

为了获得更好的浏览器支持,请参见JavaScript对象的长度


我在 Chrome 上尝试了一下,但是我得到的长度是未定义的。 - alex

1
请在一些网站上验证您的json字符串 http://jsonformatter.curiousconcept.com/ 由于JavaScript是一种脚本语言,它会解释脚本并在出现某些语法错误时终止解释。尝试在浏览器中使用一些JavaScript控制台

IE - 开发人员工具

Firefox - firebug插件


0

首先,JSON 结构不正确 - 一些元素名称缺少引号、逗号放错位置、缺失等。请将您的 JSON 与以下内容进行比较:

 var json = [{"student":{"name" : "ABCD","age":8}, "user":{ "firstName":"ABCD", "age": 9}},
            {"student":{"name" : "XCYS","age":10}, "user":{ "firstName":"GGG", "age": 11}}
            ];

使用json比垂直展开更容易校对。然后,通过一个简单的循环:

    for(var ix in json)
{
        alert(json[ix].student.name +"="+json[ix].student.age);
}

希望你能看到如何从那里开始。


0

我已经弄清楚如何解析它,看起来非常简单

我使用了data[i].student.namedata[i].user.name

这似乎会提示正确的值

感谢大家的回复!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接