如何使用groovy解析json

Nik*_*rma 43 grails groovy json

我想解析即将出现的JSON数据:

{
   "212315952136472": {
      "id": "212315952136472",
      "name": "Ready",
      "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/195762_212315952136472_4343686_s.jpg",
      "link": "http://www.hityashit.com/movie/ready",
      "likes": 5,
      "category": "Movie",
      "description": "Check out the reviews of Ready on  http://www.hityashit.com/movie/ready"
   }
}
Run Code Online (Sandbox Code Playgroud)

我使用的代码是:

JSONElement userJson = JSON.parse(jsonResponse)
userJson.data.each {
    Urls = it.link
}
Run Code Online (Sandbox Code Playgroud)

但我无法分配任何东西Urls.有什么建议?

Dón*_*nal 64

你尝试过使用JsonSlurper吗?

用法示例:

def slurper = new JsonSlurper()
def result = slurper.parseText('{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}')

assert result.person.name == "Guillaume"
assert result.person.age == 33
assert result.person.pets.size() == 2
assert result.person.pets[0] == "dog"
assert result.person.pets[1] == "cat"
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于Groovy 1.8及更高版本. (3认同)
  • 真棒!你可能需要`import groovy.json.JsonSlurper` (3认同)

Bur*_*ith 54

该响应是一个Map,其中包含一个带有键'212315952136472'的元素.地图中没有"数据"键.如果要遍历所有条目,请使用以下内容:

JSONObject userJson = JSON.parse(jsonResponse)
userJson.each { id, data -> println data.link }
Run Code Online (Sandbox Code Playgroud)

如果您知道它是单元素地图,那么您可以直接访问link:

def data = userJson.values().iterator().next()
String link = data.link
Run Code Online (Sandbox Code Playgroud)

如果您知道id(例如,如果您使用它来发出请求),那么您可以更简洁地访问该值:

String id = '212315952136472'
...
String link = userJson[id].link
Run Code Online (Sandbox Code Playgroud)


And*_*mov 7

您可以使用as运算符将 JSON 转换为 Groovy 中所需的类型:

import groovy.json.JsonSlurper

String json = '''
{
  "name": "John",  
  "age": 20
}
'''

def person = new JsonSlurper().parseText(json) as Person 

with(person) {
    assert name == 'John'
    assert age == 20
}
Run Code Online (Sandbox Code Playgroud)