var entityName = "",
arrTerms = [],
outputTemplate = '{"%entityName":[%terms]}',
h = {
"Division":
{
"oddTerms":
[
{
"entity": "Sunshine",
"Sunshine": [
{
"count": 2,
"entity": "Dodge"
},
{
"count": 1,
"entity": "Dodge Avenger"
},
]
}
]
}
};
for (var i = 0; i < h.Division.oddTerms.length; i++)
{
entityName=h.Division.oddTerms[i].entity; // "Sunshine"
terms = h.Division.oddTerms[i][entityName];
for (var j = 0; j < terms.length; j++) {
arrTerms.push('"' + terms[j].entity + '"');
}
}
// This will give you '{"Sunshine":["Dodge","Dodge Avenger"]}':
console.log(outputTemplate.replace('%entityName', entityName).replace('%terms', arrTerms.join(",")));
編集:
これについてもう少し。
JS およびオブジェクトと配列の「リテラル」の操作に慣れていない場合、JSON の操作は少し混乱する可能性があります。JS では、さまざまな方法でオブジェクトと配列を定義できますが、最も簡単な (そして多くの開発者に最も好まれている) 方法は、これらのリテラルを使用することです。
オブジェクトの例を次に示します。
var myObj = {
"some prop":"some value",
"anotherProp":"another value"
}
のメンバーを検索するにはmyObj
、いくつかの方法があります。
myObj.anotherProp
// 「別の値」
myObj["some prop"]
// プロパティ名にスペースが含まれている場合は、この形式を使用する必要があります
配列の内容をループするには、2 番目の形式を使用します。たとえば、これは機能しません。
for (var strPropName in myObj) {
console.log(myObj.strPropName); // This won't work!
}
代わりに、次のようにプロパティをループする必要があります。
for (var strPropName in myObj) {
if (myObj.hasOwnProperty(strPropName)) {
console.log(myObj[strPropName]);
}
}
このif
ブロックはオプションですが、これを常にコードに含めると、潜在的な問題を回避できます。一部のバリデーターでも必要です。
次に、配列の例を示します。
var myArray = ["some value", "anotherValue"];
数値インデックスを使用してこれらにアクセスします。
myArray[0] // "some value"
myArray[1] // "anotherValue"
myArray[2] // undefined
そして、それらをループできます:
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
配列内にオブジェクトをネストできます。
myArray = [{},{},{}];
また、オブジェクト内に配列をネストできます。
myObject = {"arr1":[], "arr2":[], "arr3":[]}