29

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"フィールドに最初の同種オブジェクトが含まれているか、2 番目の異種オブジェクトが含まれているかを知るにはどうすればよいですか?

4

4 に答える 4

24

お好きな構造でお使いいただけます。JSON は、XML がよく使用されるようなスキーマ ベースではなく、Javascript は静的に型付けされていません。

JSON.parse を使用して JSON を JS オブジェクトに変換し、プロパティの存在をテストするだけです。

var obj = JSON.parse(jsonString);
if(typeof obj.example[0].firstName != "undefined") {
   //do something
}
于 2013-08-22T18:55:23.327 に答える
5

好きなだけ組み合わせても問題ありません。

あなたはそれをテストすることができます

typeof someItem.example !== 'undefined' // True if `example` is defined.
于 2013-08-22T18:52:17.383 に答える
3

これは完全に有効な JSON です。個人的には、読みやすいので、この構文の方が好きです。

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

2 番目の質問への回答として、を使用して JSON 文字列からデータを読み取ることができますvar data = JSON.parse(datastring);。次に、 を呼び出すだけで使用できますdata.property.secondlevel。任意の変数はオブジェクト、配列、文​​字列、または数値にすることができ、ネストされた構造が可能です。

于 2013-08-22T18:54:37.263 に答える
3

配列の内容を自由に使用できます。配列内の各項目のアクセス プロパティを反復処理する前に、このことを覚えておいてください。

1 つ: これをサーバー側のオブジェクトの配列以外に逆シリアル化することはできないため、後で驚かないでください。

ヒントとして、後で処理しやすいように、「タイプ」を指定するオブジェクトに共通のフィールドを含めることができます。

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]);
}
于 2013-08-22T19:03:59.513 に答える