質問
次のものがあるとします。
{"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
(それがより適切な説明であるかどうかはわかりません)。そしてそれを変数に入れます t
JSONなので(再タグ付けに感謝します)次のようなもので参照できるようにしたいと思います。 t.data[hdrs[i]][j]
解決
コードを少し変更する必要がありました。
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]] );
}
他のヒント
それで、このように?
var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];
私の理解が正しければ、それはうまくいくはずです...
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"
配列/ハッシュの逆方向検索があります:)
あなたの質問を理解できるかどうかわかりませんが...
上記の JSON が var obj であると仮定すると、次のようになります。
obj.data[0]["Make"] // == "Honda"
最初のヘッダーによって参照されるフィールドを参照したいだけの場合は、次のようになります。
obj.data[0][obj.hdrs[0]] // == "Honda"
まず、データ配列項目の末尾のカンマを忘れています。
次のことを試してください。
@ケント・フレドリック:最後のコンマは厳密には必要ではありませんが、行をより簡単に移動できるようにすることに注意してください (つまり、最後の行の後に移動または追加する場合、その行にコンマがなかった場合は、追加することを特に覚えておく必要があります) 1つ。常に末尾にカンマを付けるのが最善だと思います。)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);
おそらく data[0].Make を試してみてください
閉じて、使用します
var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
表示されたコードは構文的に正しくありません。カンマが必要です。これを機能させることができました:
$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"]
答えの助けを借りて(そして内側と外側のループを正しくした後)、これが機能するようになりました。
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 += " " ; }
else { myTable += t.data[i][t.hdrs[j]] ; }
myTable += "</td>";
}
myTable += "</tr>";
}