google closureでJSONデータを処理する
goog.json.parse(str)で簡単にJSONを扱えそうなので、実際にテストコードを書いてみました。
goog.require("goog.json"); var jsonFromServer = '{"height": 6, "weight": 200}'; var personJson = goog.json.parse(jsonFromServer); var data = 'H=' + personJson['height'] + ';W=' + personJson['weight'];
問題なく扱えたので、そのまま入れ子になったJSONデータを処理してみました。
goog.require("goog.json"); var jsonFromServer = { "data": [ {"TESTNAME": "test1","BORN": "1974年8月3日 36才","SEX": "函館朝市","ADDRESS": "函館朝市","STATION": "函館朝市","LICENCE" : "函館朝市"}, {"TESTNAME": "test1","BORN": "1974年8月3日 36才","SEX": "五稜郭","ADDRESS": "函館朝市","STATION": "函館朝市","LICENCE": "函館朝市"}, {"TESTNAME": "test1","BORN": "1974年8月3日 36才","SEX": "函館空港","ADDRESS": "函館朝市","STATION": "函館朝市","LICENCE": "函館朝市"} ] }; var personJson = goog.json.parse(jsonFromServer);
Uncaught Error: Invalid JSON string: [object Object]
エラーをはき出してしまいます。入れ子になったJSONデータに対してはどうも対応していないようです。
いろいろ試した結果goog.setIfUndefined(obj, key, value)を使って処理すれば処理できました。
実際にJSONからデータを取得してコンソールにはき出すまでの処理です。
goog.require("goog.object"); var jsonFromServer = { "data": [ {"TESTNAME": "test1","BORN": "1974年8月3日 36才","SEX": "函館朝市","ADDRESS": "函館朝市","STATION": "函館朝市","LICENCE" : "函館朝市"}, {"TESTNAME": "test2","BORN": "1974年8月3日 36才","SEX": "五稜郭","ADDRESS": "函館朝市","STATION": "函館朝市","LICENCE": "函館朝市"}, {"TESTNAME": "test3","BORN": "1974年8月3日 36才","SEX": "函館空港","ADDRESS": "函館朝市","STATION": "函館朝市","LICENCE": "函館朝市"} ] }; var test =goog.object.setIfUndefined(jsonFromServer,'data'); console.log(test[0].ADDRESS);