Java创建和解析Json数据方法(三)——json-lib包的使用

(三)json-lib包的使用

        这篇笔记主要介绍json-lib包的创建和解析json数据的方式,主要是的JSONObject、JSONArray和Java对象:beans, maps, collections, java arrays等的转换。

1.简介

        json-lib包是一个构造和解析json的类库,提供将Java对象:beans, maps, collections, java arrays and XML等等转换成JSON数据,或者反向转换的功能。 json-lib包的下载地址:http://sourceforge.net/projects/json-lib/files/

        json-lib包的使用需要依赖下面的工具包:

这里打包了一份完整的工具包:

2.构造JSONObject和JSONArray

给出一个下面会用到的Student类:

package jsonlib;
public class Student {
	private String name;
	private String sex;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

2.1 fromObject(Object object)方法

        json-lib包中JSONObject和JSONArray类都有一个fromObject(Object object)的静态方法,即可以从参数object中构造json对象或数组。

        ①JSONObject.fromObject(Object object)中,参数可以是String、Map、beans等,不可以是collection、java arrays等

        ②JSONArray.fromObject(Object object)中,参数可以是String、Map、Colliection、collection、java arrays等

代码例子如下:

 

package jsonlib;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.*;
public class JsonlibTest {
	public static void main(String[] args) {
		//String构造JSONObject
		String name = "{'name':'JTZen9'}";
		JSONObject jsonObject3 = JSONObject.fromObject(name);
		System.out.println(jsonObject3);
		
		//Java Array构造JSONArray
		String[] strings = {"1","2","3"};
		JSONArray jsonArray1 = JSONArray.fromObject(strings);
		System.out.println(jsonArray1);
		
		//Beans构造JSONObject
		Student student = new Student();
		student.setAge(21);
		student.setName("JTZen9");
		student.setSex("male");
		JSONObject jsonObject1 = JSONObject.fromObject(student);
		System.out.println(jsonObject1);
		
		//Map构造JSONObject
		Map<string object=""> map = new HashMap<string object="">();
		map.put("name", "JTZen9");
		map.put("num", strings);
		JSONObject jsonObject2 = JSONObject.fromObject(map);
		System.out.println(jsonObject2);
		
		//List构造JSONObject
		List<object> list = new ArrayList</object><object>();
		list.add("JTZen9");
		list.add(strings);
		list.add(map);
		list.add(student);
		JSONArray jsonArray2 = JSONArray.fromObject(list);
		System.out.println(jsonArray2);
	}
}

 

输出的结果:

注意:

        ①当使用String转JSON时,如果是json对象,那么String必须是符合JSON对象的格式,同理,JSONArray也一样。

        ②如果传入fromObject(Object object)中的参数是其他类型,比如说int、double、boolean、或者不符合json格式的String,就会将生产空的JSONObject对象。详情可下载json-lib包查看fromObject方法的源代码。

2.2 其他方法

JSONObject类:

        put()方法和accumulate()方法,其实和org.json包的用法类似:

        ①put()方法,向json对象中加入字段和相应值,会覆盖原来的值。

        ②accumulate()方法,向json对象和数组中的某字段追加相应值,不会覆盖原来的值。

JSONArray类:

        add()方法,和org.json包中JSONArrray类的put()方法类似,在json数组末尾追加元素,也可以在指定位置追加。

package jsonlib;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.*;
public class JsonlibTest {
	public static void main(String[] args) {
		Map<string object=""> map = new HashMap<string object="">();
		map.put("name", "JTZen9");
		map.put("age", 21);
		Student student = new Student();
		student.setAge(21);
		student.setName("JTZen9");
		student.setSex("male");
		
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("name", "JTZen9");
		System.out.println(jsonObject);
		jsonObject.put("student", student);
		System.out.println(jsonObject);
		
		JSONArray jsonArray = new JSONArray();
		jsonArray.add("JTZen9");
		jsonArray.add(map);
		jsonArray.add(0,student); //在指定位置加入
		System.out.println(jsonArray);
	}
}

运行结果:

json-lib包构造json对象和数组,还有一个element()方法,在JSONObject类中与put()类似,在JSONArray类中与add()类似,更具体的差别往后有深入研究在继续记录。

3.JSON数据解析

        json-lib包中使用JSONObject和JSONArray类解析json数据与org.json包类似,同样是使用各种getXXX()方法和optXXX()方法。

        ①getXXX()方法:如getJSONObject、getJSONArray、getInt等,如果key不存在的话,就会抛出异常。

        ②optXXX()方法:如optBoolean、optString、optInt等,如果包含key这个字段,那么返回这个字段的值,否则返回一个默认值。

package jsonlib;
import net.sf.json.*;
public class JsonlibTest {
	public static void main(String[] args) {
		String jsonData = "{'name':'JTZen9','age':21}";
		JSONObject jsonObject = JSONObject.fromObject(jsonData);
		System.out.println(jsonObject);
		String nameStr = jsonObject.getString("name");
		System.out.println(nameStr);
		int ageInt = jsonObject.optInt("age");
		System.out.println(ageInt);
		
		String sexStr1 = jsonObject.optString("sex");
		System.out.println("optString('sex')输出的:" + sexStr1); //默认值为空
		String sexStr2 = jsonObject.getString("sex");
		System.out.println(sexStr2);      //报错
	}
}

输出结果:

        因为有的时候,抛出异常会出现各种error信息,影响用户体验或者影响开发员人的下一步操作,所以这种时候就最好是使用optXXX()方法。

 

 

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值