Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing array of JSON arrays in Groovy

Tags:

I have the following string from a REST JSON response:

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

The rest response definition is from Facebook: FB REST Link

I am using Google App Engine + GAELYK which runs in Jetty.

What is the best way to convert the above into array of maps in Groovy on the Server. (This would probably have to recurse through the response)

I am looking for something easy that doesn't include a lot of libraries. (I dont have maven)

like image 930
Tihom Avatar asked Oct 04 '10 12:10

Tihom


People also ask

How do I iterate through a JSON array in Groovy?

Use that to create a JSON array. You then loop through the array for (int i = 0; i < array. length(); i++) and retrieve each JSON object by calling array. getJSONObject(i); which returns JSONObject .

What is slurper in Groovy script?

Syntax. def slurper = new JsonSlurper() JSON slurper parses text or reader content into a data structure of lists and maps. The JsonSlurper class comes with a couple of variants for parser implementations.


1 Answers

EDIT: Groovy since 1.8.0 has an integrated 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 } 

Old answer below:

Use JsonSlurper...

An example script to read that response would be:

@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 } 

This outputs:

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

As you can see, list is a list of Maps, so if you just wanted a list of the names for example, you could just do:

def names = list.name 

To use this in your Gaelyk app, you should just need to download json-lib-2.3-jdk15.jar from here and do something similar (without the @Grab then, as you'll have the jar in your WEB-INF/lib folder.

--edit--

Looking around, found this page showing the dependencies for json-lib

  • jakarta commons-lang 2.4
  • jakarta commons-beanutils 1.7.0
  • jakarta commons-collections 3.2
  • ssh linuxs
  • ezmorph 1.0.6

The @Grab in the test script does a lot of background work for you

like image 145
tim_yates Avatar answered Oct 22 '22 16:10

tim_yates