在Groovy中解析JSON数组的数组

Tih*_*hom 17 java groovy google-app-engine json facebook

我有一个来自REST JSON响应的以下字符串:

[
   {
      "uid":10512213,
      "name":"Bob"
   },
   {
      "uid":7208201,
      "name":"John"
   },
   {
      "uid":10570,
      "name":"Jim"
   },
   {
      "uid":1799657,
      "name":"Sally"
   }
]
Run Code Online (Sandbox Code Playgroud)

其余的响应定义来自Facebook:FB REST Link

我正在使用在Jetty中运行的Google App Engine + GAELYK.

在服务器上将上述内容转换为Groovy中的地图数组的最佳方法是什么?(这可能需要通过回复递归)

我正在寻找一些不包含大量库的简单方法.(我没有maven)

tim*_*tes 37

编辑:从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 }
Run Code Online (Sandbox Code Playgroud)

老答案如下:

使用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 }
Run Code Online (Sandbox Code Playgroud)

这输出:

[uid:10512213, name:Bob]
[uid:7208201, name:John]
[uid:10570, name:Jim]
[uid:1799657, name:Sally]
Run Code Online (Sandbox Code Playgroud)

如您所见,list是一个地图列表,所以如果您只想要一个名称列表,您可以这样做:

def names = list.name
Run Code Online (Sandbox Code Playgroud)

要在你的Gaelyk应用程序中使用它,你只需要从这里下载json-lib-2.3-jdk15.jar并做类似的事情(不用@Grab,因为你的WEB-INF/lib文件夹中有jar .

- 编辑 -

环顾四周,发现这个页面显示了 json-lib 的依赖关系

测试脚本中的@Grab为您做了很多后台工作


Buh*_*ndi 6

JSON数组以[字符开头,以字符结尾].JSON对象以a开头{并以}.结尾.

如果你去JSON.org,你可以下载JSONArray.java.用它来创建一个JSON数组.然后循环遍历数组for (int i = 0; i < array.length(); i++)并通过调用array.getJSONObject(i);返回来检索每个JSON对象JSONObject.从那里,获得相应的属性值,例如long uid = json.getLong("uid");

希望这可以帮助.