89

これまで JSON を使用したことがないため、その構文に慣れていません。

現時点では、さまざまなデータを含む複数の配列があります。

それぞれが複数のデータを持つ複数の配列を含む 1 つの JSON オブジェクトを作成したいと思います。

例えば

それぞれ異なる車種の複数の配列を含む、cars と呼ばれるオブジェクト。各配列には、車のモデルと、ドアの数などの他のタイプのデータが含まれます (架空の例にすぎないため、実際には関係ありません)。

誰かが構文を例で説明してくれれば幸いです。

4

5 に答える 5

176

最も外側のレベルでは、JSON オブジェクトは で始まり、{で終わり}ます。

サンプルデータ:

{
    "cars": {
        "Nissan": [
            {"model":"Sentra", "doors":4},
            {"model":"Maxima", "doors":4},
            {"model":"Skyline", "doors":2}
        ],
        "Ford": [
            {"model":"Taurus", "doors":4},
            {"model":"Escort", "doors":4}
        ]
    }
}

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

別のアプローチ (インデックス付き配列ではなく、車のモデルに連想配列を使用):

{
    "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);
    }
}

編集:

訂正: JSON オブジェクトは で始まり で終わりますが、で始まり で終わる{JSON}配列 (最も外側のレベル) を持つことも有効です。[]

また、元の JSON データの重大な構文エラーが修正されました。JSON オブジェクトのすべてのキー名は二重引用符で囲む必要があり、JSON オブジェクトまたは JSON 配列のすべての文字列値も二重引用符で囲む必要があります。

見る:

于 2012-06-25T21:57:17.353 に答える
22

私が読んでいる良い本: Nicholas C. Zakas による Professional JavaScript for Web Developers 3rd Edition には、JSON 構文に関する次の情報があります。

「JSON 構文では、3 種類の値を表現できます」。

あなたが興味を持っているものに関して、それは言います:

「配列は、JavaScript の配列リテラル表記を使用して JSON で表されます。たとえば、これは JavaScript の配列です。

var values = [25, "hi", true];

同様の構文を使用して、JSON でこの同じ配列を表すことができます。

[25, "hi", true]

変数またはセミコロンがないことに注意してください。配列とオブジェクトを一緒に使用して、次のようなより複雑なデータのコレクションを表すことができます。

{
    "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
                }
              ]
}

この配列には、本を表す多数のオブジェクトが含まれています。各オブジェクトにはいくつかのキーがあり、そのうちの 1 つは「著者」であり、これが別の配列です。オブジェクトと配列は通常、JSON データ構造の最上位部分であり (必須ではありませんが)、多数のデータ構造を作成するために使用できます。」

JavaScript オブジェクトを JSON 文字列にシリアライズ (変換) するには、JSON オブジェクトの stringify() メソッドを使用できます。Mark Linusの回答の例:

var cars = [{
    color: 'gray',
    model: '1',
    nOfDoors: 4
    },
    {
    color: 'yellow',
    model: '2',
    nOfDoors: 4
}];

cars は JavaScript オブジェクトになりました。それを JSON オブジェクトに変換するには、次のようにします。

var jsonCars = JSON.stringify(cars);

どちらが得られますか:

"[{"color":"gray","model":"1","nOfDoors":4},{"color":"yellow","model":"2","nOfDoors":4}]"

逆に、JSON オブジェクトを JavaScript オブジェクトに変換するには (これを解析と呼びます)、parse() メソッドを使用します。さらに情報が必要な場合は、これらの用語を検索してください...または本を入手してください。多くの例があります。

于 2012-06-25T22:29:58.173 に答える
2

もう一つの例:

[  
[  
    {  
        "@id":1,
        "deviceId":1,
        "typeOfDevice":"1",
        "state":"1",
        "assigned":true
    },
    {  
        "@id":2,
        "deviceId":3,
        "typeOfDevice":"3",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":3,
        "deviceId":4,
        "typeOfDevice":"júuna",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":4,
        "deviceId":5,
        "typeOfDevice":"nffjnff",
        "state":"Regular",
        "assigned":true
    },
    {  
        "@id":5,
        "deviceId":6,
        "typeOfDevice":"44",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":6,
        "deviceId":7,
        "typeOfDevice":"rr",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":7,
        "deviceId":8,
        "typeOfDevice":"j",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":8,
        "deviceId":9,
        "typeOfDevice":"55",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":9,
        "deviceId":10,
        "typeOfDevice":"5",
        "state":"Excelent",
        "assigned":true
    },
    {  
        "@id":10,
        "deviceId":11,
        "typeOfDevice":"5",
        "state":"Excelent",
        "assigned":true
    }
],
1
]

配列の読み取り

$.each(data[0], function(i, item) {
         data[0][i].deviceId + data[0][i].typeOfDevice  + data[0][i].state +  data[0][i].assigned 
    });

JSON コードをよりよく理解するには、http://www.jsoneditoronline.org/を使用してください

于 2016-07-14T00:06:07.620 に答える
1
var cars = [
    manufacturer: [
        {
            color: 'gray',
            model: '1',
            nOfDoors: 4
        },
        {
            color: 'yellow',
            model: '2',
            nOfDoors: 4
        }
    ]
]
于 2012-06-25T21:47:23.697 に答える