Jump to content

How to Parse JSON in Java

+ 3
  tmo9d's Photo
Posted Sep 23 2009 12:25 PM

Use json-lib, a library which adds JSON support to any Java program. json-lib can take a String and turn it into a JSONObject which can then be used to retrieve specific attributes.

1. Add this dependency to your project:
<dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.3</version>
      <scope>compile</scope>
    </dependency>


What does this mean? See How to Add a Dependency to a Java Project

2. Put the following JSON sample in your classpath:
{'foo':'bar',
 'coolness':2.0,
 'altitude':39000,
 'pilot':{'firstName':'Buzz',
      	  'lastName':'Aldrin'},
 'mission':'apollo 11'}


3. Load the resource from the classpath and parse this JSON as follows:
package com.discursive.answers;

import java.io.InputStream;

import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;

import org.apache.commons.io.IOUtils;

public class JsonParsing {

    public static void main(String[] args) throws Exception {
    	InputStream is = 
    		JsonParsing.class.getResourceAsStream( "sample-json.txt");
    	String jsonTxt = IOUtils.toString( is );
    	
    	JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );    	
    	double coolness = json.getDouble( "coolness" );
    	int altitude = json.getInt( "altitude" );
    	JSONObject pilot = json.getJSONObject("pilot");
    	String firstName = pilot.getString("firstName");
    	String lastName = pilot.getString("lastName");
    	
    	System.out.println( "Coolness: " + coolness );
    	System.out.println( "Altitude: " + altitude );
    	System.out.println( "Pilot: " + lastName );
    }
}


Note that JSONSerializer returns a JSON object. This is a general object which could be a JSONObject or a JSONArray depending on the JSON you are trying to parse. In this example, since I know that the JSON is a JSONObject, I can cast the result directly to a JSONObject. If you are dealing with JSON that could return a JSONArray, you'll likely want to check the type of the object that is returned by toJSON.

This sample project is available on GitHub here: http://github.com/to...le-json-parsing

For more information about the json-lib project, see JSON-LIB project page

Cover of Java Web Services: Up and Running
Learn more about this topic from Java Web Services: Up and Running. 

This quick, practical, and thorough introduction to Java web services -- the JAX-WS and JAX-RS APIs -- offers a mix of architectural overview, complete working code examples, and short yet precise instructions for compiling, deploying, and executing a sample application. You'll not only learn how to write web services from scratch, but also how to integrate existing services into your Java applications.

Learn More Read Now on Safari


Tags:
0 Subscribe


3 Replies

0
  Stuart12345's Photo
Posted Sep 30 2011 10:13 AM

Be sure to add the classifier:

<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>

see http://stackoverflow...net-sf-json-lib
+ 1
  Adam Musial-Bright's Photo
Posted Oct 03 2011 09:39 AM

Gson, the Google JSON library is also very nice.

You will need a simple POJOs for the JSON representation:

// JSON representation
class MyJson {

  public MyJson() {}

  private String foo;
  private float coolness;
  // other attributes

  public void setFoo(String foo) {
    this.foo = foo;
  }

  public String getFoo() {
    return foo;
  }

  public void setCoolness(float coolness) {
    this.coolness = coolness;
  }

  public float getCoolness() {
    return coolness;
  }

}


Now you can convert a JSON representation into a JSON object:

  Gson gson = new Gson();
  MyJson myJson = new gson.fromJson(jsonTxt, MyJson.class);

  // now you have a real java object
  System.out.println(myJson.getFoo());


done.
0
  handark's Photo
Posted Mar 30 2012 07:21 AM

Gson is a very good library.

Thanks Adam