Как разобрать JSON с помощью Groovy - PullRequest
41 голосов
/ 14 июля 2011

Я хочу проанализировать данные 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"
   }
}

Код, который я использую:

JSONElement userJson = JSON.parse(jsonResponse)
userJson.data.each {
    Urls = it.link
}

Но я не могу получить ничего назначенного на Urls. Есть предложения?

Ответы [ 3 ]

64 голосов
/ 14 июля 2011

Вы пробовали использовать 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"
52 голосов
/ 14 июля 2011

Этот ответ представляет собой карту с одним элементом с ключом «212315952136472». На карте нет ключа данных. Если вы хотите перебрать все записи, используйте что-то вроде этого:

JSONObject userJson = JSON.parse(jsonResponse)
userJson.each { id, data -> println data.link }

Если вы знаете, что это одноэлементная Карта, вы можете получить прямой доступ к link:

def data = userJson.values().iterator().next()
String link = data.link

И если вы знали идентификатор (например, использовали его для выполнения запроса), то вы можете получить доступ к значению более кратко:

String id = '212315952136472'
...
String link = userJson[id].link
3 голосов
/ 11 марта 2017

Вы можете сопоставить JSON с определенным классом в Groovy, используя оператор as:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...