1

私が以下を持っている場合:

{"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
}

また、"hdrs" という名前 (つまり "Make") を持っていますが、どうすればdata配列インスタンスを参照できますか? 動作data["Make"][0]するはずですが、正しい参照を取得できません

編集

あいまいで申し訳ありません..ループしhdrsて各 hdr 名を取得できますが、の各インスタンス値を使用hdrsして、すべてのデータ要素を検索する必要がありますdata(説明が適切かどうかはわかりません)。JSONなので変数tに入れます(再タグ付けに感謝します)。次のようなもので参照できるようにしたいと思います。t.data[hdrs[i]][j]

4

9 に答える 9

4

私はあなたのコードを少し変更しなければなりませんでした:

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };

        alert( x.data[0].Make );

編集:あなたの編集に応じて

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
    alert( x.data[i][x.hdrs[Header]] );
}           
于 2008-09-17T19:49:56.703 に答える
2

まず、データ配列項目の末尾のコンマを忘れました。

次のことを試してください。

var obj_hash = {
    "hdrs": ["Make", "Model", "Year"],
    "data": [
        {"Make": "Honda", "Model": "Accord", "Year": "2008"},
        {"Make": "Toyota", "Model": "Corolla", "Year": "2008"},
        {"Make": "Honda", "Model": "Pilot", "Year": "2008"},
    ]
};

var ref_data = obj_hash.data;

alert(ref_data[0].Make);

@Kent Fredric:最後のコンマは厳密には必要ありませんが、行をより簡単に移動できることに注意してください(つまり、最後の行の後に移動または追加し、コンマがない場合は、特に1つ追加することを忘れないでください)。常に末尾にコンマを付けるのが最善だと思います。

于 2008-09-17T19:50:46.717 に答える
1
var x = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

x.data[0].Make == "Honda"
x['data'][0]['Make']  == "Honda"

配列/ハッシュを逆方向にルックアップします:)

于 2008-09-17T19:50:04.350 に答える
1

あなたの質問が理解できるかわかりませんが...

上記のJSONがvarobjであると仮定すると、次のようになります。

obj.data[0]["Make"] // == "Honda"

最初のヘッダーによって参照されるフィールドを参照するだけの場合は、次のようになります。

obj.data[0][obj.hdrs[0]] // == "Honda"
于 2008-09-17T19:50:55.423 に答える
1

それで、このように?

var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];

私があなたを正しく理解しているなら、それはうまくいくはずです...

于 2008-09-17T19:48:38.050 に答える
0

表示されているコードは構文的に正しくありません。カンマが必要です。私はこれを機能させました:

$foo = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"},
   {"Make":"Toyota","Model":"Corolla","Year":"2008"},
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

次に、次のようにデータにアクセスできます。

$foo["data"][0]["make"]
于 2008-09-17T19:50:36.330 に答える
0

答えの助けを借りて(そして内側と外側のループを正しく取得した後)、これを機能させました:

var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
 myTable +=    "<tr>";
 for (var j = 0; j < t.hdrs.length; j++) {
  myTable += "<td>" ;
   if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
于 2008-09-17T20:36:48.713 に答える
0

おそらくdata[0].Makeを試してください

于 2008-09-17T19:47:50.360 に答える
0

閉じる、使用します

var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
于 2008-09-17T19:48:18.563 に答える