複数の配列でJSONオブジェクトを作成するにはどうすればよいですか?


83

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

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

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

例えば

車と呼ばれるオブジェクト。それぞれ異なる車種の複数の配列が含まれています。各配列には、車のモデルと、ドアの数などの他のタイプのデータが含まれます(架空の例だけでは問題ありません)。

誰かが例を使って構文を説明していただければ幸いです。


2
非常にまれな状況を除いて、JSONを直接操作することはありません。ネイティブデータ構造を操作し、ライブラリを使用してその構造をJSON文字列に変換します。
マークB

回答:


160

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

サンプルデータ:

{
    "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という変数に割り当てられている場合、JSONへのアクセスは次のようになります。

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

編集:

訂正:A JSONオブジェクトが開始と{し、端部を有する}が、それはで始まる(一番外側のレベルでの)JSON配列、持つことも有効だ[と端部とを]

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

見る:


明確にするために:これはオブジェクトですか?[]ブラケットが必要ですか?
ハリー

5
JSONデータはオブジェクト(基本的には連想配列)です。インデックス付き配列は角括弧を使用しますが[0,1,2]、連想配列は中括弧を使用します{x:1,y:2,z:3}。最も外側のオブジェクト内のデータはいずれのタイプの配列でもかまいませんが、最も外側のオブジェクト自体は中括弧を使用する必要があります。
Matt Coughlin 2012年

そして、どのように考えIループこれで町経由:pastebin.com/qyQ2Y9sn私は緯度とLNGにアクセスできるようにします。
ハリー

1
for (var town in markers.towns) { alert(markers.towns[town].lat) }
Matt Coughlin 2012年

1
確かに、問題ありません:)上記の両方の例で、JSONデータを反復処理する例をいくつか追加しました。
Matt Coughlin 2012年

21

私が読んでいる良い本:Nicholas C. Zakas 3rdEditionによるWeb開発者向けのプロフェッショナルJavaScriptには、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()メソッドを使用します。さらに情報が必要な場合は、これらの用語を検索してください...または本を入手すると、多くの例があります。


-上記の例では「版」&「今年は、」引用符で囲まなければなりませんjsonlint.co.ukはなりません検証そう
レクソール

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/を使用してください


あなたのjsonの最後から2番目の行の1とは何ですか?
フィリップカークブライド2016

1
@PhilipKirkbride最も外側の配列の2番目の要素?
rootkea 2017

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

オブジェクト内に自動車メーカーの配列を配置するのはどうですか?そうcars> manufacturer> model, color, doors。(オブジェクト内の配列内の配列)
ハリー

-4

以下のメソッドを使用して、任意の配列である任意の値を渡します。

入力パラメーター:url、例: "/ node / [配列の任意のint値] / anyKeyWhichInArray"例: "cars / Nissan / [0] / model"

これは、任意の応答に使用できます。

    public String getResponseParameterThroughUrl(Response r, String url) throws JsonProcessingException, IOException {
    String value = "";
    String[] xpathOrder = url.split("/");
    ObjectMapper objectMapper = new ObjectMapper();
    String responseData = r.getBody().asString();       
    JSONObject jsonObject = new JSONObject(responseData);
    byte[] jsonData = jsonObject.toString().getBytes();
    JsonNode rootNode = objectMapper.readTree(jsonData);
    JsonNode node = null;
    for(int i=1;i<xpathOrder.length;i++) {
        if(node==null)
            node = rootNode;
        if(xpathOrder[i].contains("[")){
            xpathOrder[i] = xpathOrder[i].replace("[", "");
            xpathOrder[i] = xpathOrder[i].replace("]", "");
            node = node.get(Integer.parseInt(xpathOrder[i]));
        }
        else
            node = node.path(xpathOrder[i]);
    }
    value = node.asText();
    return value;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.