JSON数组可以包含不同键/值对的对象吗?

问题描述 投票:22回答:4

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"字段是否包含第一个同类对象或第二个异构对象?

javascript arrays json
4个回答
20
投票

您可以使用任何喜欢的结构。 JSON并非以XML经常使用的方式为基础,并且Javascript不是静态类型的。

您可以使用JSON.parse将JSON转换为JS对象,然后仅测试属性的存在

var obj = JSON.parse(jsonString);
if(typeof obj.example[0].firstName != "undefined") {
   //do something
}

5
投票

您可以随意混合和匹配都没关系。

您可以对其进行测试

typeof someItem.example !== 'undefined' // True if `example` is defined.

3
投票

这是完全有效的JSON。我个人更喜欢这种语法,因为它更容易阅读:

{
    "example": [
        {
            "firstName": "John",
            "lastName": "Doe"
        },
        {
            "fruit": "apple"
        },
        {
            "length": 100,
            "width": 60,
            "height": 30
        }
    ]
}

关于回答第二个问题,您可以使用var data = JSON.parse(datastring);从JSON字符串读取数据。然后只需调用data.property.secondlevel即可使用它。任何变量都可以是对象,数组,字符串或数字,允许使用嵌套结构。


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]);
}
© www.soinside.com 2019 - 2024. All rights reserved.