JSON工具(org.json)

来源:互联网 发布:ubuntu添加搜狗输入法 编辑:程序博客网 时间:2024/04/17 07:31

json

json 是一种与开发语言无关的、轻量级的数据存储格式。最早是在javascript中使用的,后来就使用广泛了。

json 的官网

json官网链接

json 的数据结构

  • Object(对象) 使用{key:value}的形式来表示
  • Array(数组) 使用[xxx,xx]的形式表示
  • 基本类型

    • string
    • number
    • true
    • false
    • null

    json示例

    下面使用json表示一个student对象

 {    "name" : "jack",    "sex" : "boy",    "age" : "12",    "teacher" :     {        "name" : "teacher1",        "age" : "40"    },    "major" : ["Chinese","English"],    "has_girlFriend" : false,    "boyFriend" : null }

java 处理json

java中处理json其实就是将目标转为json格式,或者将json格式的数据转化为javaBean,该加括号的地方家括号,该加逗号的地方加逗号,如果要处理起来也不是很困难,只是写起来比较麻烦,我们可以使用现有的处理办法。
下面记录json官方提供一个开源的java处理json的类

jsonObject

在json官网往下拉可以找到对java的支持。点击JSON-java就转到java处理json的项目github网址,可以去查看源码。

JSON-java github网址

github的网址

将源码下载的本地就可以直接使用了,这里使用最常用JsonObject。

JSONObject 的构造方法

JSONObject是使用map来装json格式数据的,因为json的键值对和map格式相容。下面是JSONObject的构造方法:只贴出了属性和常用的几个构造方法。

public class JSONObject {//JSONObject 有一个map属性 private final Map<String, Object> map; public static final Object NULL = new Null(); //JSONObject的构造方法// 无参数的构造方法public JSONObject() {    this.map = new HashMap<String, Object>();}//使用map构造public JSONObject(Map<?, ?> map) {    this.map = new HashMap<String, Object>();    if (map != null) {        for (final Entry<?, ?> e : map.entrySet()) {            final Object value = e.getValue();            if (value != null) {                this.map.put(String.valueOf(e.getKey()), wrap(value));            }        }    }}//使用bean构造public JSONObject(Object bean) {    this();    this.populateMap(bean);}//使用String构造public JSONObject(String source) throws JSONException {        this(new JSONTokener(source));    }}

下面是一个JSONObject的使用例子

创建工程

创建一个空的java工程

使用JSON-java的源码

在src下创建一个名为org.json的包,并把下载的源码全部复制到这个包下,如果不报错就可以直接使用了。

创建测试类来测试JSONObject

为了方便测试,可以引入junit测试,不用的话就用main方法来测试好了。

junit学习笔记

JSONObject的put方法

JSONObject使用put方法添加属性到自己身上,put方法有很多重载的方法,对应着不同的数据类型。
举个例子 :

    public JSONObject put(String key, Object value)         throws JSONException {        if (key == null) {            throw new NullPointerException("Null key.");        }        if (value != null) {            testValidity(value);            this.map.put(key, value);        } else {            this.remove(key);        }        return this;    }

put方法的作用就是使用键值对的形式将我们要装的内容封装起来装进map集合里边。

JSONObject 的Get()方法

get() 是获取元素用的,可以根据不同的类型使用不同的get方法,比如getString,getBoolean等等。

JSONObject 的 isNull(String key) 方法

用来判断是否有这个属性

JSONObject的toString方法

toString方法是将JSONObject转化为json格式的字符串。它间接调用了write()方法,write()就是前边说的加括号加冒号加逗号的方法。

  public Writer write(Writer writer, int indentFactor, int indent)            throws JSONException {        try {            boolean commanate = false;            final int length = this.length();            Iterator<String> keys = this.keys();            writer.write('{');            if (length == 1) {                Object key = keys.next();                writer.write(quote(key.toString()));                writer.write(':');                if (indentFactor > 0) {                    writer.write(' ');                }                writeValue(writer, this.map.get(key), indentFactor, indent);            } else if (length != 0) {                final int newindent = indent + indentFactor;                while (keys.hasNext()) {                    Object key = keys.next();                    if (commanate) {                        writer.write(',');                    }                    if (indentFactor > 0) {                        writer.write('\n');                    }                    indent(writer, newindent);                    writer.write(quote(key.toString()));                    writer.write(':');                    if (indentFactor > 0) {                        writer.write(' ');                    }    writeValue(writer, this.map.get(key), indentFactor, newindent);                    commanate = true;                }                if (indentFactor > 0) {                    writer.write('\n');                }                indent(writer, indent);            }            writer.write('}');            return writer;        } catch (IOException exception) {            throw new JSONException(exception);        }    }

下面我将之前提到的student转化为json字符串

无参数的使用方法

    @Test    public  void jsonTest()    {        Object nullObject = null;        JSONObject jsonObject = new JSONObject();        jsonObject.put("name", "jack");        jsonObject.put("sex", "boy");        jsonObject.put("age", "12");        jsonObject.put("has_girlFriend", false);        // null 不能直接put,需要转化成Object对象        jsonObject.put("boyFriend", nullObject);        jsonObject.put("teacher", "jack");        jsonObject.put("major", new String[]{"Chinese","Chinese"});        System.out.println(jsonObject.toString());    }

打印结果 :

{"has_girlFriend":false,"sex":"boy","age":"12","name":"jack","teacher":"jack","major":["Chinese","Chinese"]}

可以看出来是可以成功转化为json字符串的,只是顺序变了一下。
这里使用的是JSONObject的无参数构造方法,当然也可以使用其他的构造方式。

javabean 直接转JSONObject

先创建一个学生的bean

package com.json.bean;public class Student {    private String name;    private String sex;    private int age;    public Student() {        super();    }    public Student(String name, String sex, int age) {        this.name = name;        this.sex = sex;        this.age = age;    }        //get/set...}

直接使用bean创建JSONObject:

    @Test    public void javabeanTest()    {        Student student = new Student("jack", "boy", 12);        JSONObject jsonObject = new JSONObject(student);        System.out.println(jsonObject.toString());    }

输出结果:

{"has_girlFriend":false,"sex":"boy","age":12,"name":"jack"}

MAP的方式创建JSONObject

    @Test    public void mapTest()    {        Object nullObject = null;        HashMap<String, Object>  map = new HashMap<>();        map.put("name", "jack");        map.put("sex", "boy");        map.put("age", "12");        map.put("has_girlFriend", false);        map.put("boyFriend", nullObject);        map.put("teacher", "jack");        map.put("major", new String[]{"Chinese","Chinese"});        JSONObject object = new JSONObject(map);        System.out.println(object.toString());    }

测试结果 :

{"has_girlFriend":false,"sex":"boy","name":"jack","age":"12","teacher":"jack","major":["Chinese","Chinese"]}

从json文件中获取JSONObject(String)

在工程目录下(不是src)创建json.json文件:

 {    "name" : "jack",    "sex" : "boy",    "age" : "12",    "teacher" :     {        "name" : "teacher1",        "age" : "40"    },    "major" : ["Chinese","English"],    "has_girlFriend" : false,    "boyFriend" : null }

获取文件内容并且转为JSONObject

    @Test    public void fileTest() throws IOException    {        File file = new File("file/json.json");        FileInputStream in = new FileInputStream(file);        StringBuffer context = new StringBuffer() ;        byte[] buffer = new byte[1024];        int length = in.read(buffer);        while( length != -1)        {            context.append(new String(buffer,0,length));            length = in.read(buffer);        }        JSONObject jsonObject = new JSONObject(context.toString());        if(! jsonObject.isNull("name"))        {            System.out.println(jsonObject.get("name"));        }           }

输出结果:

jack

程序源码 :

程序源码链接 提取码 :4kw7

0 0
原创粉丝点击