解析 Groovy 中的 JSON 数组数组

2022-09-02 00:22:19

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

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

其余响应定义来自 Facebook:FB REST 链接

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

在服务器上的Groovy中将上述内容转换为地图数组的最佳方法是什么。(这可能必须通过响应递归)

我正在寻找一些简单的东西,不包括很多库。(我没有专家)


答案 1

编辑:自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为您完成大量后台工作


答案 2

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

如果您转到 JSON.org,则可以下载JSONArray.java。使用它来创建 JSON 数组。然后循环访问数组,并通过调用返回 .从那里,获取相应的属性值,例如for (int i = 0; i < array.length(); i++)array.getJSONObject(i);JSONObjectlong uid = json.getLong("uid");

希望这有帮助。