ソフトウェアエンジニアのブログ

暇つぶしに書いてます。他に技術的なことは[http://qiita.com/nsas454]に書いてますのでそちらも見てください。

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);