how to parse json using groovy
I want to parse JSON data which is coming in like:
{
"212315952136472": {
"id": "212315952136472",
"name": "Ready",
"picture": "http://profile.ak.fbc开发者_Python百科dn.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"
}
}
The code I am using is:
JSONElement userJson = JSON.parse(jsonResponse)
userJson.data.each {
Urls = it.link
}
But I am not able to get anything assigned to Urls
. Any suggestions?
Have you tried using JsonSlurper?
Example usage:
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"
That response is a Map, with a single element with key '212315952136472'. There's no 'data' key in the Map. If you want to loop through all entries, use something like this:
JSONObject userJson = JSON.parse(jsonResponse)
userJson.each { id, data -> println data.link }
If you know it's a single-element Map then you can directly access the link
:
def data = userJson.values().iterator().next()
String link = data.link
And if you knew the id (e.g. if you used it to make the request) then you can access the value more concisely:
String id = '212315952136472'
...
String link = userJson[id].link
You can convert JSON to the desired type in Groovy using as
operator:
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
}
The thing with this unique number is a bit tricky.
If you know this value, easy
stage('Test Groovy JSON parsing') {
steps {
script {
def userJson = readJSON file: 'myJsonFile.json'
def keyList = userJson['212315952136472'].keySet()
echo "${keyList}" // ['id', 'name', 'picture', 'link', 'likes', 'category', 'description']
echo "${userJson['212315952136472'].name}" // Ready
echo "${userJson['212315952136472'].link}" // http://www.hityashit.com/movie/ready
}
}
}
If you don't know this number, you could walk through the JSON
userJson.each { key, value ->
echo "Walked through key $key and value $value"
}
check also the documentation at Jenkins Read JSON from File
def jsonFile = new File('File Path');
JsonSlurper jsonSlurper = new JsonSlurper();
def parseJson = jsonSlurper.parse(jsonFile)
String json = JsonOutput.toJson(parseJson)
def prettyJson = JsonOutput.prettyPrint(json)
println(prettyJson)
精彩评论