JSON数组是否可以包含不同键/值对的对象。从this tutorial开始,为JSON数组提供的示例包含相同键/值对的对象:
{
"example": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
如果我想将其更改为在JSON数组中具有不同的键/值对,则以下是否仍然是有效的JSON?
{
"example": [
{ "firstName":"John", "lastName":"Doe" },
{ "fruit":"apple" },
{ "length":100, "width":60, "height":30 }
]
}
只想确认一下。如果是这样,我如何使用JavaScript来了解JSON "example"
字段是否包含第一个同类对象或第二个异构对象?
答案 0 :(得分:18)
您可以使用任何您喜欢的结构。 JSON不是以经常使用XML的方式构建的,并且Javascript不是静态类型的。
您可以使用JSON.parse将您的JSON转换为JS对象,然后只测试属性的存在
var obj = JSON.parse(jsonString);
if(typeof obj.example[0].firstName != "undefined") {
//do something
}
答案 1 :(得分:5)
你可以根据需要混合搭配并不重要。
你可以测试一下
typeof someItem.example !== 'undefined' // True if `example` is defined.
答案 2 :(得分:3)
这是完全有效的JSON。我个人更喜欢这种语法,因为它更容易阅读:
{
"example": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"fruit": "apple"
},
{
"length": 100,
"width": 60,
"height": 30
}
]
}
至于回答第二个问题,您可以使用var data = JSON.parse(datastring);
从JSON字符串中读取数据。然后通过调用data.property.secondlevel
简单地使用它。任何变量都可以是对象,数组,字符串或数字,允许嵌套结构。
答案 3 :(得分:1)
您可以随意使用数组内容执行所需操作。在尝试迭代数组中每个项目的访问属性之前,Jus会记住这一点。
一件事:除了服务器端的对象数组之外,您将无法将其反序列化为其他任何内容,因此以后不会出现意外。
作为提示,也许您可以在对象中包含一个指定“类型”的公共字段,以便以后易于处理。
var array = [{"type":"fruit", "color":"red"},
{"type":"dog", "name":"Harry"}];
var parser = {
fruit:function(f){
console.log("fruit:" + f.color);
},
dog: function(d){
console.log("dog:"+d.name);
}};
for(var i=0;i<array.length;i++){
parser[array[i].type](array[i]);
}