web-dev-qa-db-ja.com

JSON配列の配列をGroovyで構文解析する

REST JSON応答からの次の文字列があります。

[
   {
      "uid":10512213,
      "name":"Bob"
   },
   {
      "uid":7208201,
      "name":"John"
   },
   {
      "uid":10570,
      "name":"Jim"
   },
   {
      "uid":1799657,
      "name":"Sally"
   }
]

残りの応答の定義はFacebookからのものです: FB REST Link

Jettyで動作するGoogle App Engine + GAELYKを使用しています。

上記をmapsarrayに変換する最良の方法は何ですか?サーバー上のGroovy。 (これはおそらく応答を再帰的に行う必要があります)

たくさんのライブラリを含まない簡単なものを探しています。 (私はメイブンを持っていません)

17
Tihom

編集:1.8.0以降のGroovyにはJsonSlurperが統合されています:

import groovy.json.JsonSlurper

// Example Response Data
def restResponse = '[{"uid":10512213, "name":"Bob"},{"uid":7208201, "name":"John"},{"uid":10570, "name":"Jim"},{"uid":1799657, "name":"Sally"}]'

// Parse the response
def list = new JsonSlurper().parseText( restResponse )

// Print them out to make sure
list.each { println it }

以下の古い答え:

JsonSlurperを使用...

その応答を読み取るスクリプトの例は次のようになります。

@Grab('net.sf.json-lib:json-lib:2.3:jdk15')
import net.sf.json.groovy.JsonSlurper

// Example Response Data
def restResponse = '[{"uid":10512213, "name":"Bob"},{"uid":7208201, "name":"John"},{"uid":10570, "name":"Jim"},{"uid":1799657, "name":"Sally"}]'

// Parse the response
def list = new JsonSlurper().parseText( restResponse )

// Print them out to make sure
list.each { println it }

これは出力します:

[uid:10512213, name:Bob]
[uid:7208201, name:John]
[uid:10570, name:Jim]
[uid:1799657, name:Sally]

ご覧のとおり、listはマップのリストです。たとえば、名前のリストだけが必要な場合は、次のようにします。

def names = list.name

これをGaelykアプリで使用するには、 ここからjson-lib-2.3-jdk15.jarをダウンロード し、同様のことを行う必要があります(@Grabを使用しないと、jarが作成されます)あなたのWEB-INF/libフォルダ。

-編集-

周りを見て、見つかった 依存関係を示すこのページ json-lib

テストスクリプトの@Grabは多くのバックグラウンド作業を行います

38
tim_yates

JSON配列は_[_文字で始まり、_]_文字で終わります。 JSONオブジェクトは_{_で始まり、_}_で終わります。

JSON.orgにアクセスすると、JSONArray.Javaをダウンロードできます。それを使用してJSON配列を作成します。次に、配列for (int i = 0; i < array.length(); i++)をループ処理し、array.getJSONObject(i);を呼び出して各JSONオブジェクトを取得します。これにより、JSONObjectが返されます。そこから、それぞれの属性値を取得します。 long uid = json.getLong("uid");

お役に立てれば。

6
Buhake Sindi