JSON数组是否可以包含不同键/值对的对象

Can a JSON array contain objects of different key/value pairs?

本文关键字:对象 是否 数组 包含不 JSON      更新时间:2023-09-26

JSON数组是否可以包含不同键/值对的对象。在本教程中,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"字段包含第一个同构对象还是第二个异构对象?

您可以使用任何您喜欢的结构。JSON不像通常使用XML那样基于模式,Javascript也不是静态类型的。

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

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

你可以随心所欲地混搭,这并不重要。

你可以测试一下

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

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

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

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

您可以自由地对数组的内容执行您想要的操作。在尝试迭代数组中每个项的访问属性之前,请记住这一点。

有一件事:除了服务器端的对象数组之外,您将无法将其反序列化为其他任何东西,所以以后不会有意外。

作为提示,也许您可以在指定"类型"的对象中包含一个公共字段,以便稍后处理。

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]);
}