2016-07-08 8 views
3

値の名前があらかじめわからない場合は、ネストしたJSONの値にアクセスするにはどうすればよいですか。AngularJSで不明な名前のネストされたJSON値にアクセスする

I.e.下のJSONでは、SQLiteテーブルに追加するために菓子オプションの名前にアクセスする必要があります。しかし、菓子の種類や各菓子のオプション名は私には事前に知られていません。

JSONのサンプルは、それぞれ独自の数のオプションを持つ任意の数の菓子オプションがある場合があります。

JSON

[{ 
    "sweet": "sweets", 
    "sweets": 
    [{ 
     "idsweets": "1", 
     "sweetsdesc": "Choocolate Chip" 
    }, { 
     "idsweets": "2", 
     "sweetsdesc": "Mint" 
    }], 
    "drink": "drinks", 
    "drinks": 
    [{ 
     "iddrinks": "1", 
     "drinksdesc": "Coke" 
    }, { 
     "iddrinks": "2", 
     "drinksdesc": "Pepsi" 
    }, { 
     "iddrinks": "3", 
     "drinksdesc": "Fanta" 
    }, { 
     "iddrinks": "4", 
     "drinksdesc": "Dr. Pepper" 
    }, { 
     "iddrinks": "5", 
     "drinksdesc": "Powerade" 
    }], 
    "crisp": "crisps", 
    "crisps": 
    [{ 
     "idcrisps": "1", 
     "crispsdesc": "Salt" 
    }, { 
     "idcrisps": "2", 
     "crispsdesc": "Vinegar" 
    }, { 
     "idcrisps": "3", 
     "crispsdesc": "Cheese and Onion" 
    }, { 
     "idcrisps": "4", 
     "crispsdesc": "Pepper" 
    }, { 
     "idcrisps": "5", 
     "crispsdesc": "Chilli" 
    }, { 
     "idcrisps": "6", 
     "crispsdesc": "Other" 
    }] 
}] 

私はしかし、運と、以下のことを試してくださいデータベースに各菓子オプションを挿入します。

function goInsertValueOptionsList() 
{ 
    db.transaction(insertValueOptionsList, errorCB, successCB); 
} 

function insertValueOptionsList(tx) 
{ 
    angular.forEach($scope.optionValuesAPIData, function (value, key) // A variable to hold the confectionary JSON 
    { 
     alert("Value Options - Value: " + value); // Prints the JSON [object Object] 

     for (var description in value) 
     { 
      // Get the Column name 
      alert("Value Options - Description (Column name): " + description); 
      // Get the Column value 
      alert("Value Options - Description (Column Value): " + value[description]); 

      // Inner loop for nested JSON objects 
      angular.forEach(value, function (v, k) 
      { 
       // Get the Column name - try to access e.g. idcrisps 
       alert("V Options - Description (Column name): " + v); // Not working 
       // Get the Column value 
       alert("V Options - Description (Column Value): " + k); // Not working 

       // Use v and k to insert into database 
      }); 
     } 
    }); 
} 
+0

私は最初、なぜ非標準のプロパティ名を不思議に思うでしょう。これはあなたがコントロールするものですか?全体の構造はあまりフレンドリーではありません – charlietfl

答えて

2

あなたは、このようなコードでこれらのオブジェクトのすべてを通過することができて何を見て:

data.forEach(function(dataset) // A variable to hold the confectionary JSON 
{ 

    Object.keys(dataset).forEach(function(key) 
    { 

     // Inner loop for nested JSON objects 
     if(Array.isArray(dataset[key])) { 
      dataset[key].forEach(function(item) 
      { 
       console.log(item) 

       // Use v and k to insert into database 
      }); 
     } else { 
      console.log(dataset[key]) 
     } 

    }) 

}); 

http://plnkr.co/edit/4x4uKOqmqxZcDS2DPgPM?p=preview

+0

デモ投げエラー – charlietfl

+1

チェックコンソール、そのすべて私のために – Marcus

関連する問題