2013-08-22 7 views
13

JSON配列に異なるキーと値のペアのオブジェクトが含まれている可能性があります。JSON配列に異なるキーと値のペアのオブジェクトが含まれている可能性がありますか?

{ 
"example": [ 
{ "firstName":"John" , "lastName":"Doe" }, 
{ "firstName":"Anna" , "lastName":"Smith" }, 
{ "firstName":"Peter" , "lastName":"Jones" } 
] 
} 

私はJSON配列内の異なるキー/値のペアを持って、それを変更したい場合は、まだ以下の通りです:this tutorialからは、JSON配列のために与えられた例では、同じキー/値ペアのオブジェクトで構成されてい有効なJSONですか?

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

これを確認したいだけです。もしそうなら、JavaScriptを使ってJSON "example"フィールドに最初の同種のオブジェクトか2番目の異種のオブジェクトが含まれているかどうかを知るにはどうすればいいですか?

+3

はい、JSON配列は、任意の有効なJSON文字列を含むことができる:別のキー/値のペア、他の配列、数値、文字列、全て同じアレイ内のブール値を持つオブジェクト。 – arnaud576875

+0

あなたが望むjavascriptをテストするにはここに行きます:http://jsconsole.com/ – dmoss18

+0

それはかなり古く、記事が公開されるまでに13年前に間違っていました。 –

答えて

11

好きな構造を使用できます。 JSONは、XMLが頻繁に使用され、Javascriptが静的に型指定されない方法でスキーマに基づいていません。

あなたはJSON.parseを使ってJSオブジェクトにあなたのJSONに変換してからちょうどあなたは、配列の内容でやりたいことを自由に財産

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

ありがとう。 JSON配列に均質なオブジェクトが含まれているかどうかをテストする最良の方法は何ですか? – tonga

+1

@ tongaこのように配列の均質性をテストすることはできません。 –

+0

すべての項目の処理が完了するまで配列が均質であるかどうかだけを知ることができますが、答えは正しいですが、XMLに関する記述は間違っています... XMLはよく知られた仕様と非常に明確な定義に基づいていますが、スキーマを使用するかどうかは、そのオプションです。 –

5

あなたが好きなだけ混合して一致させることは問題ではありません。

あなたはそれが完全に有効なJSONだ

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

ありがとう。このアプローチは、配列に均質なオブジェクトが含まれているかどうかをテストできますか? JavaScriptを使用してJSON配列の均質性をテストする最良の方法は何ですか? – tonga

+1

@ tongaそれはそれを繰り返すでしょう。 –

+0

配列をテストするための組み込みJS関数はありませんか? – tonga

1

それをテストすることができます。それが簡単に読み取るため個人的に私は、よりよいこの構文を好む:

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

あなたの2番目の質問に答えるためにと、あなたがvar data = JSON.parse(datastring);を使用してJSON文字列からデータを読み取ることができます。その後、単にdata.property.secondlevelを呼び出して使用してください。任意の変数は、オブジェクト、配列、文​​字列または数値にすることができ、入れ子構造にすることができます。

+0

もしあなたがダウンボートしたら、少なくとも私に_why_を知らせてください。私は質問を読んだが、これをdownvotingのポイントを見ていないのですか? – Broxzier

+0

再フォーマットのための元の質問に対する編集を提案するかもしれませんか?しかし私のdownvoteではなく... – hurrymaplelad

1

の存在をテストすることができます。 Jusは配列の各項目のアクセスプロパティを反復しようとする前に、これについて覚えておいてください。

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]); 
} 
関連する問題