質問

モバイルアプリケーションにTitaniumを使用しています。アプリケーションでは、サーバーが JSON データを返し、JSON.parse() によって解析されます。Android では正常に動作します。また、それが有効であることを確認するために再確認しました http://jsonformatter.curiousconcept.com/

私のJSONデータは次のとおりです。

    {
   "email":"example@mail.com",
   "count":6,
   "0":{
      "id":"146996",
      "user_id":"25069",
      "item":"item1",
      "start_my_day":"none",
      "scheduled":"n",
      "calendar":"none",
      "start":"00000000T000000",
      "end":"00000000T000000",
      "added":"2011-11-30 06:55:47",
      "updated":"2011-11-30 06:55:47"
   },
   "1":{
      "id":"146988",
      "user_id":"25069",
      "item":"item2",
      "start_my_day":"none",
      "scheduled":"n",
      "calendar":"none",
      "start":"00000000T000000",
      "end":"00000000T000000",
      "added":"2011-11-30 06:52:20",
      "updated":"2011-11-30 06:52:20"
   }
   }

何が得られるかを確認しようとしたとき:

var response = JSON.parse(json, function (key, value) {
    Ti.API.debug('JSON: ' + key + ' <-> ' + value);
    return value;
});

オブジェクト「0」は本来のとおりに解析されていないようですが、そのフィールドはその親の一部になっています。出力は次のとおりです。

[DEBUG] JSON: email <-> example@mail.com
[DEBUG] JSON: count <-> 2
[DEBUG] JSON: id <-> 146996
[DEBUG] JSON: user_id <-> 25069
[DEBUG] JSON: item <-> item1
[DEBUG] JSON: start_my_day <-> none
[DEBUG] JSON: scheduled <-> n
[DEBUG] JSON: calendar <-> none
[DEBUG] JSON: start <-> 00000000T000000
[DEBUG] JSON: end <-> 00000000T000000
[DEBUG] JSON: added <-> 2011-11-30 06:55:47
[DEBUG] JSON: updated <-> 2011-11-30 06:55:47
[DEBUG] JSON: 0 <-> [object Object]
[DEBUG] JSON: id <-> 146988
[DEBUG] JSON: user_id <-> 25069
[DEBUG] JSON: item <-> item2
[DEBUG] JSON: start_my_day <-> none
[DEBUG] JSON: scheduled <-> n
[DEBUG] JSON: calendar <-> none
[DEBUG] JSON: start <-> 00000000T000000
[DEBUG] JSON: end <-> 00000000T000000
[DEBUG] JSON: added <-> 2011-11-30 06:52:20
[DEBUG] JSON: updated <-> 2011-11-30 06:52:20
[DEBUG] JSON: 1 <-> [object Object]
[DEBUG] JSON:  <-> [object Object]

私が見たところによると..それは返されるべきものではありません。カウントを引用符で囲んで「0」を「10」に変更しようとしましたが、解析は同じままです。さらに詳しい情報が必要な場合は、お知らせください。

ありがとう

役に立ちましたか?

解決

JSON.parse(str, func) は、フォーマット/置換の目的で各プロパティに対して再帰的に呼び出されます。失敗するわけではありませんが、必要に応じて使用しないでください。

オブジェクトを反復処理する場合は、JSON を定期的に解析し、ループを使用することをお勧めします。

var parsed = JSON.parse(json);

for(var key in parsed) {
    console.log(key, parsed[key]);

    for(var key2 in parsed[key]) {
        console.log("Nested: ", key2, parsed[key][key2]);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top