Java中JSON数据的处理

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或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);
        }
        }

欢迎参观我的新网站悦来

猜你喜欢

转载自blog.csdn.net/qq_37415801/article/details/80930083