JSON总结-持续更新补充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON总结-持续更新补充相关的知识,希望对你有一定的参考价值。

基本的json格式

{
    "name": "jobs", 
    "boolean": true, 
    "age": null, 
    "num": 88
}

json对象

{
    "starcraft": {
        "INC": "Blizzard", 
        "price": 60
    }
}

json数组

{
    "person": [
        "jobs", 
        60
    ]
}

json对象数组

{
    "array": [
        {
            "name": "jobs"
        }, 
        {
            "name": "bill", 
            "age": 60
        }, 
        {
            "product": "war3", 
            "type": "game", 
            "popular": true, 
            "price": 60
        }
    ]
}

常见的JSON解析工具

json-lib的net.sf.json的json处理包

  优点:老牌,应用广泛

  缺点:jar包依赖多、转换成bean存在不足(bean里面存在list集合,map等)、性能不足

  依赖jar包:

    - commons-beanutils-1.8.0.jar    

    - commons-collections-3.2.1.jar

    - commons-lang-2.5.jar

    - commons-logging-1.1.1.jar

    - ezmorph-1.0.6.jar

    - json-lib-2.4-jdk15.jar

阿里巴巴官方出的fastjson处理包

  优点:高性能,不需要额外的jar,可以直接跑在jdk上面,速度极致

  缺点:bean转换为json时可能会存在错误(类型上面)

谷歌官方出品的Gson

  优点:无依赖,直接跑在jdk上,只要存在getter、setter方法就可以解析,神器!

  缺点:必须在对象转换之前创建好对象的类型以及其成员,性能稍差

json-lib对json数据的处理

package com.glorze.json;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonlibUtil {
    public static void main(String[] args) {
        Set<Book> bookSet = new HashSet<Book>();
        Book book=new Book();
        book.setId("0808");
        book.setName("基督山伯爵");
        bookSet.add(book);

        Student student = new Student();
        student.setName("高老四");
        student.setAge(25);
        student.setDescribe("男神、帅哥");
        student.setSex("男");
        student.setBooks(bookSet);

        //Bean转换成json字符串
        String json = JSONObject.fromObject(student).toString();
        System.out.println("Bean转换成Json:"+json);

        //json转Bean
        String jsonStr = "{\"id\":\"2\",\"name\":\"Json技术\"}";
        JSONObject jsonObject = JSONObject.fromObject(jsonStr);
        Book book2 = (Book) JSONObject.toBean(jsonObject,Book.class);
        System.out.println("json字符串转Bean:"+book2.toString());

        //json转换成List(Set同理)
        String jsonStr2 = "[{\"id\":\"1\",\"name\":\"Java技术\"},{\"id\":\"2\",\"name\":\"Json技术\"}]";
        JSONArray jsonArray = JSONArray.fromObject(jsonStr2);
        JSONObject jsonObject2 = null;
        Book book3 = null;
        int size = jsonArray.size();
        List list = new ArrayList(size);
        for (int i = 0; i < size; i++) {
            jsonObject2 = jsonArray.getJSONObject(i);
            book3 = (Book) JSONObject.toBean(jsonObject, Book.class);
            list.add(book3);
        }
        System.out.println("json字符串转List:"+JSONArray.fromObject(list).toString());
    }
}

fastjson对json数据的处理

package com.glorze.json;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

public class FastjsonUtil {
    public static void main(String[] args) {
        Set<Book> bookSet = new HashSet<Book>();
        Book book=new Book();
        book.setId("0808");
        book.setName("基督山伯爵");
        bookSet.add(book);

        Student student = new Student();
        student.setName("高老四");
        student.setAge(25);
        student.setDescribe("男神、帅哥");
        student.setSex("男");
        student.setBooks(bookSet);

        //Bean转换成json字符串
        String json=JSON.toJSONString(student, false);// true:格式化 false(默认):不格式化
        System.out.println("Bean转换成Json:"+json);

        //json转Bean
        String jsonStr = "{\"id\":\"2\",\"name\":\"Json技术\"}";
        Book book2 = JSON.parseObject(jsonStr,Book.class);
        System.out.println("json字符串转Bean:"+book2.toString());

        //json转换成List(Set同理)
        String jsonStr2 = "[{\"id\":\"1\",\"name\":\"Java技术\"},{\"id\":\"2\",\"name\":\"Json技术\"}]";
        List<Book> bookList = JSON.parseObject(jsonStr2,new TypeReference<ArrayList<Book>>(){});
        System.out.println("json字符串转List:"+JSON.toJSONString(bookList,true));

    }
}

Gson对json数据的处理

package com.glorze.json;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonUtil {
    public static void main(String[] args) {

        Set<Book> bookSet = new HashSet<Book>();
        Book book=new Book();
        book.setId("0808");
        book.setName("基督山伯爵");
        bookSet.add(book);

        Student student = new Student();
        student.setName("高老四");
        student.setAge(25);
        student.setDescribe("男神、帅哥");
        student.setSex("男");
        student.setBooks(bookSet);

        //bean转换成json
        Gson gson = new Gson();
        String json = gson.toJson(student);
        System.out.println("Bean转换成Json:"+json);

        //json转Bean
        String jsonStr = "{\"id\":\"2\",\"name\":\"Json技术\"}";
        Book book2 = gson.fromJson(jsonStr, Book.class);
        System.out.println("json字符串转换成Bean:"+book2.toString());

        //json转换成List(Set同样)
        String jsonList = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
        List<Book> bookList = gson.fromJson(jsonList, new TypeToken<List<Book>>(){}.getType());
        String listJson = gson.toJson(bookList);
        System.out.println("json转换成List:"+listJson);

    }
}

附三个封装工具类

JsonlibUtil.java FastjsonUtil.java GsonUtil.java

下载地址

网盘链接:http://pan.baidu.com/s/1c2mu1Ni 密码:72qh

 

更多内容请查看 高老四博客

以上是关于JSON总结-持续更新补充的主要内容,如果未能解决你的问题,请参考以下文章

linux命令总结——后续用到的内容持续补充和更新

BootStrap有用代码片段(持续总结)

☀️~算法系列之爆肝万字总结七种查找算法,持续补充更新中,建议收藏~☀️

BootStrap实用代码片段(持续总结)

小程序各种功能代码片段整理---持续更新

个人 upload-labs 通关总结持续更新中