2017-01-05 2 views
-1

です:私が欲しいものjavascriptオブジェクトのプロパティ未定義が、それは私は、JSONファイルのように見てきたが

{ 
    "results": { 
    "name1": { 
     "printouts": { 
      "property1": [{ 
        "someName": "someText", 
        "someName2": "someURL", 
        "someName3": integer, 
        "someName4": boolean 
       } 
      ], 
      "property2": [ 
       "someText" 
      ], 
      "property3": [ 
       "someText" 
      ], 
      "property4": [ 
       "someText" 
      ], 
      "property5": [ 
       "someText" 
      ], 
      "property6": [ 
       "someText" 
      ] 
     }, 
     "someName": "someText", 
     "someName2": "someURL", 
     "someName3": integer, 
     "someName4": boolean 
    }, 
    "name2": { 
     "printouts": { 
      "property1": [{ 
        "fulltext": "someText", 
        "fullurl": "someURL", 
        "namespace": integer, 
        "exists": boolean 
       } 
      ], 
      "property2": [ 
       "someText" 
      ], 
      "property3": [ 
       "someText" 
      ], 
      "property4": [ 
       "someText" 
      ], 
      "property5": [ 
       "someText" 
      ], 
      "property6": [ 
       "someText" 
      ] 
     }, 
     "someName": "someText", 
     "someName2": "someURL", 
     "someName3": integer, 
     "someName4": boolean 
    }, 
...... 
} 

printouts内の各オブジェクトのproperty6にアクセスすることです。 私はこれまで何をやったか:

for (i in results) { 
     if (someOtherArray.length < 1) { 
      someOtherArray.push(i.printouts.property6.toString()); 
     } 

しかし、これは私にエラーを取得:未定義のプロパティproperty6を読み取ることができません。何が間違っているのですか?

ありがとう。

+0

は(** i.name.printouts.property6.toStringであってもよい)** – Curiousdev

+0

結果があるため、二重Nameプロパティの代わりにオブジェクトの配列でなければなりません。 –

+0

'someText'の後ろに余分な' ''があるようです。 '' 'property5":[someText "]、' – Nope

答えて

2

あなたはそれが可変のためのブラケット表記でproperty accessorを対象にする必要がある

i.printouts.property6 

と財産への誤ったアクセス権を持っています。

data.results[i].printouts.property6 
//^^^^^^^^^^^^^ 

次に、キーを繰り返して、必要なプロパティを選択できます。

var data = { results: { name1: { printouts: { property1: [{ someName: "someText", someName2: "someURL", someName3: 33, someName4: false }], property2: ["someText"], property3: ["someText"], property4: ["someText"], property5: ["someText"], property6: ["someText"] }, someName: "someText", someName2: "someURL", someName3: 37, someName4: true }, name2: { printouts: { property1: [{ fulltext: "someText", fullurl: "someURL", namespace: 35, "exists": true }], property2: ["someText"], property3: ["someText"], property4: ["someText"], property5: ["someText"], property6: ["someText"] }, someName: "someText", someName2: "someURL", someName3: 34, someName4: false } } }; 
 

 
Object.keys(data.results).forEach(function (k) { 
 
    console.log(data.results[k].printouts.property6); 
 
});

-1

あなたのあなたがこれにあなたのJSONを変更する必要がありますので、あなたの最初のnameを上書きします"name"秒:あなたは本当にすべてのアイテムのプロパティnameとして"name"を持っている場合

{ 
    "results": [ 
    {"name": { 
     "printouts": { 
      "property1": [{ 
        "someName": "someText", 
        "someName2": "someURL", 
        "someName3": integer, 
        "someName4": boolean 
       } 
      ], 
      "property2": [ 
       someText 
      ], 
      "property3": [ 
       someText 
      ], 
      "property4": [ 
       someText 
      ], 
      "property5": [ 
       someText" 
      ], 
      "property6": [ 
       "someText" 
      ] 
     }, 
     "someName": "someText", 
     "someName2": "someURL", 
     "someName3": integer, 
     "someName4": boolean 
    }, 
    }, "name": { 
     "printouts": { 
      "property1": [{ 
        "fulltext": "someText", 
        "fullurl": "someURL", 
        "namespace": integer, 
        "exists": boolean 
       } 
      ], 
      "property2": [ 
       someText 
      ], 
      "property3": [ 
       someText 
      ], 
      "property4": [ 
       someText 
      ], 
      "property5": [ 
       someText" 
      ], 
      "property6": [ 
       "someText" 
      ] 
     }, 
     "someName": "someText", 
     "someName2": "someURL", 
     "someName3": integer, 
     "someName4": boolean 
    }}, 
...... 
} 

はもちろん、これはのみ適用されます。あなたが提案1にあなたのJSONを変更する場合、これはあなたが物事を行うべきかです:

for (i in results) { 
     if (someOtherArray.length < 1) { 
      someOtherArray.push(results[i].name.printouts.property6.toString()); 
     } 
} 

あなたは変わらず、あなたのJSONを残す場合は、これはあなたが続行する必要がある方法です:

基本的に
for (i in results) { 
     if (someOtherArray.length < 1) { 
      someOtherArray.push(results[i].printouts.property6.toString()); 
     } 
} 
+0

なぜ私の答えがダウン投票されたのだろうか?この質問が打ち切られる前に、どこが間違っているのか、誤解されたのか正確に見たいと思っています。 –

関連する問題