JSON解析之GSON、FastJSON

JSON介绍

JSON:json(JavaScript Object Notation)是一种轻量级的数据交换格式,json相较于XML来说,json更加小巧,且描述能力并不差,所以网络传输时使用的流量更加少,速度更快。故而json的逐渐代替XML,但是并不能完全取代,XML现在基本用来配置文件更加多。
json的描述格式介绍:
{} : 表示一个对象
[] : 表示一个数组
对象中的属性可以看做一个个 键值对 ,属性或者值使用 " " 引号 来表示,键 与 值之间使用 :冒号来连接 例如: {"name" : "小白"} . 每一个键值对使用 ,逗号分隔。
注意:json 数组中可以嵌套对象,键值对中的值可以为对象。

json案例:

{
	"naem":"小红",
	"age":"18",
	"friend":["张三","李四",{
        "name":"小白",
        "age":"17"
    }],
     "newfriend":{
        "name":"小花",
        "age":"19"
    }
}

数据多复杂的话可以使用网上在线解析工具 json视图,数据查看一目了然。

JSON解析之GSON解析

解析前需下载并引入 gson,jar 包(百度、GitHub等下载),gson是Google提供用来解析 json 的类库。

一、将 Java 对象转换为 json字符串

  1. 创建测试类 Book;
  2. Book 具有 名称 (name),介绍(info)等属性;
import com.google.gson.Gson;

public class Test_GSON {
    public static void main(String[] args) {
        // 创建 Book 对象
        Book book = new Book("唐诗三百首","是由清朝蘅塘退士编撰的一部唐诗选集");
        // 把 book 转换为 json 字符串
        String json = new Gson().toJson(book,Book.class);
        System.out.println(json);

    }

    // Book 测试类
    static class Book{
        private String name;
        private String info;

        @Override
        public String toString() {
            return "Book{" +
                    "name='" + name + '\'' +
                    ", info='" + info + '\'' +
                    '}';
        }

        public Book(String name, String info) {
            this.name = name;
            this.info = info;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }
    }
}

结果:

{"name":"唐诗三百首","info":"是由清朝蘅塘退士编撰的一部唐诗选集"}

二、解析 JSON 为 Java对象

/**
 *  解析 JSON
 */
public class Test_GSON {
    public static void main(String[] args) {
        String json = "{\"name\":\"唐诗三百首\",\"info\":\"是由清朝蘅塘退士编撰的一部唐诗选集\"}";
        Book book = new Gson().fromJson(json,Book.class);
        System.out.println(book);
    }

}

结果:

Book{bookName='null', numBer='null', price=0}

三、 解析 json 为 Map 集合

1.创建 json 字符串;
2.解析 json

import com.google.gson.Gson;

import java.util.HashMap;

/**
 *  解析 JSON
 */
public class Test_GSON {
    public static void main(String[] args) {
        // 创建 json
        String json = "{\"content\":[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]}";
        // 解析 json
        HashMap data = new Gson().fromJson(json, HashMap.class);
        System.out.println(data.get("content"));
    }

}

结果:

[锄禾日当午, 汗滴禾下土, 谁知盘中餐, 粒粒皆辛苦]

注意:json数组看似是一个字符串数组,实质 则为 ArrayList 集合。

import com.google.gson.Gson;

import java.util.HashMap;

/**
 *  解析 JSON
 */
public class Test_GSON {
    public static void main(String[] args) {
        // 创建 json
        String json = "{\"content\":[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]}";
        // 解析 json
        HashMap data = new Gson().fromJson(json, HashMap.class);
        System.out.println(data.get("content").getClass());
    }

}

结果:
JSON解析之GSON、FastJSON

JSON解析之FastJson

FastJson :FastJson是阿里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。

一、将 Java 对象转换为 json字符串

  1. 创建测试类 Book;
  2. Book 具有 名称 (name),介绍(info)等属性;
import com.alibaba.fastjson.JSON;

/**
 *  将 Java 对象转换为 json字符串
 */
public class Test_FastJson {
    public static void main(String[] args) {
        // 创建 Book 对象
        Book book = new Book("唐诗三百首","是由清朝蘅塘退士编撰的一部唐诗选集");
        // 转换为 JSON字符串
        String json = JSON.toJSONString(book);
        System.out.println(json);

    }

结果:

{"info":"是由清朝蘅塘退士编撰的一部唐诗选集","name":"唐诗三百首"}

二、解析 JSON 为 Java对象

import com.alibaba.fastjson.JSON;

/**
 *  解析 Json 为 Java 对象
 */
public class Test_FastJson {
    public static void main(String[] args) {
        // 创建 json 字符串
        String json = "{\"info\":\"是由清朝蘅塘退士编撰的一部唐诗选集\",\"name\":\"唐诗三百首\"}";
        // 解析 json
        Book book = JSON.parseObject(json, Book.class);
        System.out.println(book);
    }

}

结果:

Book{name='唐诗三百首', info='是由清朝蘅塘退士编撰的一部唐诗选集'}

三、解析 JSON 字符串数组

import com.alibaba.fastjson.JSON;

import java.util.List;

/**
 *  解析 Json 字符串数组
 */
public class Test_FastJson {
    public static void main(String[] args) {
        // 创建 json 字符串数组
        String json = "[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]";
        // 解析 json
        List<String> data = JSON.parseArray(json,String.class);
        System.out.println(data.get(1));

    }

}

结果:

汗滴禾下土

FastJson国内使用较多,个人推荐使用Gson,比较稳定。
以上为个人理解,如有错误,欢迎纠正。

上一篇:各种json报错


下一篇:problems during rovio build