How to parse JSON in Java

From: http://answers.oreilly.com/topic/257-how-to-parse-json-in-java/


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: 
Subscribe


2 Replies

 
   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 
 
   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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值