Java中JSON数据的处理
Java中处理json数据的包有多个,比如org.json和json-lib,这里主要记录一下org.json的使用方法。
里面有两个类需要了解一下。
org.json.JSONArray。这是一个处理json中数组的类。关于json中的数组,可以在上一篇文章中了解到。
org.json.JSONObject。这是一个处理json对象的类。关于json对象,也可以在上一篇文章中了解到。
用这两个类基本就可以进行json数据与Java对象之间的转换了。
先看一段代码。
JSONObject obj = new JSONObject();
obj.put("name", "张三");
obj.put("age", "18");
obj.put("sex", "男");
System.out.println(obj);
这是创建了一个JSONObject的对象,添加了name,age,sex三个元素。
对应输出的json字符串是这样的:
{“sex”:“男”,“name”:“张三”,“age”:“18”}
看起来还不错,当我们需要传输数据时这样就可以实现我们的功能了。
但是在Java中更多时候是对对象操作,我们很可能会创建一个Person类,然后添加name,age,sex字段。
那如何把一个Person对象直接转换为json数据呢。很简单,只要一行代码即可:
JSONObject obj = new JSONObject(new Person("张三",18,"男"));
JSONObject的构造器可以接受一个Java对象,但是这个对象并不是随便一个都可以,需要一个条件,就是这个对象需要是一个JavaBean,或者说这个对象需要有get,set或is方法。
简单介绍一下JavaBean:JavaBean的类必选是具体公开的,并且具有无参构造器,内部的字段必须要有get(is)和set方法。
JSONObject的常用构造器如下:
JSONObject()
空构造器
JSONObject(JSONObject jo, java.lang.String[] names)
接受一个JSONObject对象和一个json名称数组
JSONObject(java.util.Map,?> map)
接受一个Map
JSONObject(java.lang.Object bean
)接受一个javaBean
JSONObject(java.lang.Object object, java.lang.String[] names)
接受一个Java对象,指定名称数组
JSONObject(java.lang.String source)
接收json格式的文本
每个构造器试一下就知道什么功能了,不再具体介绍。
然后对JSONObject中的常用方法介绍一下:
append(java.lang.String key, java.lang.Object value)
这是向json中的数组添加元素的方法。
put(java.lang.String key, boolean value)
添加一个名称/值对到JSONObject对象中。值可以是boolean,Collection,double,int,long,Map,Object类型的
remove(java.lang.String key)
移除指定名称的名称/值对
get(java.lang.String key)
获取指定名称的名称/值对,名称不存在抛出异常
opt(java.lang.String key)
也是获取指定名称的名称/值对,但是如果名称不存在,不会抛出异常,会返回一个默认值
JSONArray中的常用方法:
get(int index)
获取指定下标的元素,不存在则抛出异常
opt(int index)
获取指定下标的元素,不存在不抛出异常,返回默认值。
put(boolean value)
添加一个元素,可取boolean,Collection,double,int,long,map,Object
put(int index, int value)
在指定下标处添加一个元素,如果指定的下标小于最大值,则会进行替换,如果大于最大值,则会添加元素,在指定下标与原来最大下标之间(如果间隔大于1)会用null填充
remove(int index)
移除指定下标的元素,返回移除的元素或者是null
下面是一个JavaBean转换为json文本的例子:
public class Message {
private int code;
private String date;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public class App{
public static void main(String[] args) {
Message msg = new Message();
msg.setCode(200);
msg.setMsg("successed");
SimpleDateFormat spf = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
String format = spf.format(date);
msg.setDate(format);
System.out.println(new JSONObject(msg));
}
}
下面是JSON文本解析的例子:
public class App {
public static void main(String[] args) {
String s = "{\r\n" +
" \"name\": \"中国\",\r\n" +
" \"province\": [{\r\n" +
" \"name\": \"黑龙江\",\r\n" +
" \"cities\": {\r\n" +
" \"city\": [\"哈尔滨\", \"大庆\"]\r\n" +
" }\r\n" +
" }, {\r\n" +
" \"name\": \"广东\",\r\n" +
" \"cities\": {\r\n" +
" \"city\": [\"广州\", \"深圳\", \"珠海\"]\r\n" +
" }\r\n" +
" }, {\r\n" +
" \"name\": \"台湾\",\r\n" +
" \"cities\": {\r\n" +
" \"city\": [\"台北\", \"高雄\"]\r\n" +
" }\r\n" +
" }, {\r\n" +
" \"name\": \"新疆\",\r\n" +
" \"cities\": {\r\n" +
" \"city\": [\"乌鲁木齐\"]\r\n" +
" }\r\n" +
" }]\r\n" +
"}";
JSONObject jsonObj = new JSONObject(s);
// 获取中国
System.out.println("获取中国 = " + jsonObj.getString("name"));
// 省数组
JSONArray arr = jsonObj.getJSONArray("province");
System.out.println("省数组 = " + arr);
// 黑龙江省
jsonObj = arr.getJSONObject(0);
System.out.println("黑龙江省" + jsonObj);
// 黑龙江省名字
String name2 = jsonObj.getString("name");
System.out.println("黑龙江省名字 = " + name2);
// 黑龙江省城市数组
arr = jsonObj.getJSONObject("cities").getJSONArray("city");
System.out.println("黑龙江省城市数组" + arr);
}
}
我的新博客站悦来