リテラルが数字のみのJSONオブジェクトの処理について

1,523 views
Skip to first unread message

Tsuyoshi KUSAKA

unread,
Jul 25, 2013, 8:10:38 AM7/25/13
to google-app...@googlegroups.com
日下@KyotoGASです。
#最近投稿が多くてすみません

Google Apps Scriptで、以下のようなJSONオブジェクトの処理ができずに困っています。

  {
    "data":
      {"1":{
        "id":111,
        "value":"abc",
      },
      "0":{
        "id":222,
        "value":"xxx",
      }
    }
  }

  ※実際のJSONデータはもっと複雑で上記はそれを簡略化したものです

同じJSONオブジェクトを、Javascriptであれば

  data['1'].value

という記述で問題なく処理できたのですが、
Google Apps Scriptではこの記述では正しく動作せず、
data['1'] がundefinedとなってしまって、data['1'].value ではTypeErrorエラーとなってしまいました。

ちなみにいろいろ試したところ、オブジェクトのリテラルが数字だけでないケースについては、この問題は発生しませんでした。

このあたりはJavascriptと同様に処理できるかと考えていたのですが、Google Apps Script独自での処理方法があるのでしょうか?

あまり影響はないかと考えているのですが、JSONオブジェクトの取得は以下のように行っています。

○Google Apps Scriptの場合

  var url = 'https://xxx';
  var options = xxx
  var response = UrlFetchApp.fetch(url, options);
  var data = Utilities.jsonParse(response.getContentText());
  ...

○Javascriptの場合

  jQuery.ajax({
    type: 'POST',
    url: 'https://xxx',
    data: xxx,
    success: function(data, text_status, xhr){
      ...
    },
  });

ご教示よろしくお願い致します。

Ohashi, Keisuke

unread,
Jul 25, 2013, 8:14:02 AM7/25/13
to google-app...@googlegroups.com
To 日下さん

大橋(soundTricker)です。

このへんの話ですね。

Utilities.jsonParseはバクがあるので、
JSON.parseを使ったほうが良いです。



2013年7月25日 21:10 Tsuyoshi KUSAKA <tsuyosh...@gmail.com>:

--
このメールは Google グループのグループ「Google Apps API Japan」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、google-apps-api-...@googlegroups.com にメールを送信します。
このグループに投稿するには、google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 

Tsuyoshi KUSAKA

unread,
Jul 25, 2013, 9:17:49 AM7/25/13
to google-app...@googlegroups.com
大橋様

日下@KyotoGASです。

早々にご返信いただき、ありがとうございます。

ご教示いただきました通り
 JSON.parse()
を使うことで正常に処理できました。

ありがとうございました。

Yoshiaki Kawazu

unread,
Jul 25, 2013, 8:37:08 AM7/25/13
to google-app...@googlegroups.com, google-app...@googlegroups.com
kawazです。

jsonParseの前に前処理として以下のようなテキスト処理をしてみてはどうでしょう?

content.replace(/"([0-9]+)":/, '"index$1":')

こうする事で index0 などといったキー名でアクセスできるようになるかと思います。


2013/07/25 21:10、Tsuyoshi KUSAKA <tsuyosh...@gmail.com> のメッセージ:

--

Tsuyoshi KUSAKA

unread,
Jul 27, 2013, 2:18:13 AM7/27/13
to google-app...@googlegroups.com
kawazさま

日下@KyotoGASです。

ご返信いただき、ありがとうございます。

なるほど、そういう方法もありますね。

ただ正規表現を使う場合には、
想定している部分以外も変換されてしまわないか注意が必要ですね。

Reply all
Reply to author
Forward
0 new messages