Как разбирать json с помощью groovy
Я хочу проанализировать данные 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
. Любые предложения?
Ответы
Ответ 1
Этот ответ представляет собой карту с одним элементом с ключом "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
Ответ 2
Вы пытались использовать 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"
Ответ 3
Вы можете сопоставить 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
}
Ответ 4
У меня есть контракт, определенный в Groovy для доступа к конечной точке отдыха, как часть реализации Spring Cloud Contract. Может кто-нибудь помочь мне получить тело ответа в виде строки.
Contract.make {
request {
method 'GET'
url '/service/90640454'
headers {
header 'Content-Type': 'application/json;charset=UTF-8'
}
}
response {
status 200
headers {
header 'Content-Type': 'application/json;charset=UTF-8'
}
-- how to print or get the response into a string
}
}