How to parse JSON in Java
I have the following JSON text. How can I parse it to get the values of pageName
, pagePic
, post_id
, etc.?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Solution 1:
The org.json library is easy to use.
Just remember (while casting or using methods like getJSONObject
and getJSONArray
) that in JSON notation
-
[ … ]
represents an array, so library will parse it toJSONArray
-
{ … }
represents an object, so library will parse it toJSONObject
Example code below:
import org.json.*;
String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");
JSONArray arr = obj.getJSONArray("posts"); // notice that `"posts": [...]`
for (int i = 0; i < arr.length(); i++)
{
String post_id = arr.getJSONObject(i).getString("post_id");
......
}
You may find more examples from: Parse JSON in Java
Downloadable jar: http://mvnrepository.com/artifact/org.json/json
Solution 2:
For the sake of the example lets assume you have a class Person
with just a name
.
private class Person {
public String name;
public Person(String name) {
this.name = name;
}
}
Google GSON (Maven)
My personal favourite as to the great JSON serialisation / de-serialisation of objects.
Gson g = new Gson();
Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John
System.out.println(g.toJson(person)); // {"name":"John"}
Update
If you want to get a single attribute out you can do it easily with the Google library as well:
JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();
System.out.println(jsonObject.get("name").getAsString()); //John
Org.JSON (Maven)
If you don't need object de-serialisation but to simply get an attribute, you can try org.json (or look GSON example above!)
JSONObject obj = new JSONObject("{\"name\": \"John\"}");
System.out.println(obj.getString("name")); //John
Jackson (Maven)
ObjectMapper mapper = new ObjectMapper();
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);
System.out.println(user.name); //John
Solution 3:
-
If one wants to create Java object from JSON and vice versa, use GSON or JACKSON third party jars etc.
//from object to JSON Gson gson = new Gson(); gson.toJson(yourObject); // from JSON to object yourObject o = gson.fromJson(JSONString,yourObject.class);
-
But if one just want to parse a JSON string and get some values, (OR create a JSON string from scratch to send over wire) just use JaveEE jar which contains JsonReader, JsonArray, JsonObject etc. You may want to download the implementation of that spec like javax.json. With these two jars I am able to parse the json and use the values.
These APIs actually follow the DOM/SAX parsing model of XML.
Response response = request.get(); // REST call JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class))); JsonArray jsonArray = jsonReader.readArray(); ListIterator l = jsonArray.listIterator(); while ( l.hasNext() ) { JsonObject j = (JsonObject)l.next(); JsonObject ciAttr = j.getJsonObject("ciAttributes");
Solution 4:
quick-json parser is very straightforward, flexible, very fast and customizable. Try it
Features:
- Compliant with JSON specification (RFC4627)
- High-Performance JSON parser
- Supports Flexible/Configurable parsing approach
- Configurable validation of key/value pairs of any JSON Hierarchy
- Easy to use # Very small footprint
- Raises developer friendly and easy to trace exceptions
- Pluggable Custom Validation support - Keys/Values can be validated by configuring custom validators as and when encountered
- Validating and Non-Validating parser support
- Support for two types of configuration (JSON/XML) for using quick-JSON validating parser
- Requires JDK 1.5
- No dependency on external libraries
- Support for JSON Generation through object serialisation
- Support for collection type selection during parsing process
It can be used like this:
JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);