如何使用多个数组创建JSON对象?

Har*_*rry 77 json

我以前从未使用过JSON,所以我不熟悉它的语法.

目前我有多个包含不同数据的数组.

我想创建一个JSON对象,它包含多个数组,每个数组包含多个数据.

例如

一个名为cars的对象,包含多个阵列,每个阵列用于不同的汽车制造.在每个阵列中将是汽车的模型以及一些其他类型的数据,例如门的数量(这并不仅仅是一个虚构的例子.)

如果有人用一个例子解释语法,将不胜感激.

Mat*_*lin 143

在最外层,JSON对象以a开头,以a {结尾}.

样本数据:

{
    "cars": {
        "Nissan": [
            {"model":"Sentra", "doors":4},
            {"model":"Maxima", "doors":4},
            {"model":"Skyline", "doors":2}
        ],
        "Ford": [
            {"model":"Taurus", "doors":4},
            {"model":"Escort", "doors":4}
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

如果将JSON分配给名为data的变量,则访问它将如下所示:

data.cars['Nissan'][0].model   // Sentra
data.cars['Nissan'][1].model   // Maxima
data.cars['Nissan'][2].doors   // 2

for (var make in data.cars) {
    for (var i = 0; i < data.cars[make].length; i++) {
        var model = data.cars[make][i].model;
        var doors = data.cars[make][i].doors;
        alert(make + ', ' + model + ', ' + doors);
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法(使用汽车模型的关联数组而不是索引数组):

{
    "cars": {
        "Nissan": {
            "Sentra": {"doors":4, "transmission":"automatic"},
            "Maxima": {"doors":4, "transmission":"automatic"}
        },
        "Ford": {
            "Taurus": {"doors":4, "transmission":"automatic"},
            "Escort": {"doors":4, "transmission":"automatic"}
        }
    }
}

data.cars['Nissan']['Sentra'].doors   // 4
data.cars['Nissan']['Maxima'].doors   // 4
data.cars['Nissan']['Maxima'].transmission   // automatic

for (var make in data.cars) {
    for (var model in data.cars[make]) {
        var doors = data.cars[make][model].doors;
        alert(make + ', ' + model + ', ' + doors);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

更正:JSON对象以其开头{}以其结束,但它也有一个JSON数组(在最外层),以...开头[和结束].

此外,原始JSON数据中的重要语法错误已得到纠正:JSON对象中的所有键名必须使用双引号,并且JSON对象或JSON数组中的所有字符串值也必须使用双引号.

看到:

  • JSON数据是一个对象(基本上是一个关联数组).索引数组使用方括号`[0,1,2]`,而关联数组使用花括号,`{x:1,y:2,z:3}`.最外层对象中的任何数据都可以是数组类型,但最外层对象本身必须使用花括号. (5认同)

小智 19

我正在阅读的一本好书:Nicholas C. Zakas 3rd Edition的Web开发人员专业JavaScript提供了有关JSON语法的以下信息:

"JSON语法允许表示三种类型的值".

关于你感兴趣的那个,Arrays它说:

"使用JavaScript中的数组文字表示法在JSON中表示数组.例如,这是JavaScript中的数组:

var values = [25, "hi", true];
Run Code Online (Sandbox Code Playgroud)

您可以使用类似的语法在JSON中表示相同的数组:

[25, "hi", true]
Run Code Online (Sandbox Code Playgroud)

注意没有变量或分号.数组和对象可以一起用于表示更复杂的数据集合,例如:

{
    "books":
              [
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C. Zakas"
                    ],
                    "edition": 3,
                    "year": 2011
                },
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C.Zakas"
                    ],
                    "edition": 2,
                    "year": 2009
                },
                {
                    "title": "Professional Ajax",
                    "authors": [
                        "Nicholas C. Zakas",
                        "Jeremy McPeak",
                        "Joe Fawcett"
                    ],
                    "edition": 2,
                    "year": 2008
                }
              ]
}
Run Code Online (Sandbox Code Playgroud)

此Array包含许多表示书籍的对象.每个对象都有几个键,其中一个是"authors",这是另一个数组.对象和数组通常是JSON数据结构的顶级部分(即使这不是必需的),也可用于创建大量数据结构."

要将JavaScript对象序列化(转换)为JSON字符串,可以使用JSON对象stringify()方法.对于Mark Linus的例子回答:

var cars = [{
    color: 'gray',
    model: '1',
    nOfDoors: 4
    },
    {
    color: 'yellow',
    model: '2',
    nOfDoors: 4
}];
Run Code Online (Sandbox Code Playgroud)

汽车现在是一个JavaScript对象.要将其转换为JSON对象,您可以执行以下操作:

var jsonCars = JSON.stringify(cars);
Run Code Online (Sandbox Code Playgroud)

产量:

"[{"color":"gray","model":"1","nOfDoors":4},{"color":"yellow","model":"2","nOfDoors":4}]"
Run Code Online (Sandbox Code Playgroud)

相反,将JSON对象转换为JavaScript对象(这称为解析),您将使用parse()方法.如果您需要更多信息,请搜索这些条款......或者获取该书,它有很多例子.