Java中JSON的使用总结

  • JSON

简介: JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式。

  • 首先JSON具有三种表现格式

  • 对象格式

通过与其他对象格式对比举例说明: 

抛出问题  有一个类:书  属性:书名和简介,如何定义?

java:
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName(“金苹果”);
b.setInfo(“种苹果”);
...


js:
var b = new Object();
b.name = "金苹果";
b.info = "种苹果";


XML:
<book>
<name>金苹果</name>
<info>种苹果</info>
</book>


JSON:
{
"name":"金苹果",
"info":"种苹果"
}

JSON中一个对象, 由一个大括号表示.括号中 描述对象的属性 . 通过键值对来描述对象的属性(可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
键值对的值, 可以是JS中的任意类型的数据。

  • 数组格式

1.属性的值是一一对应的,一个属性的值可以包含多个信息(用[ ]括起包含的信息,可以理解为数组)

2:方括号中每个数据以json对象形式出现

3:每两个数据以逗号分隔(最后一个无需逗号)

遵守上面3点,便可形成一个json对象数组(及一个数组中,存储了多个json对象)

理解了上面两种基本的形式,我们就可以得出其他的数据形式,例如下面这个:

{
	"社团":"话剧社",
	"部门":[
	{"ID": 1001, "name": "调研部", "info": "申请场地"},
	{"ID": 1002, "name": "外联部", "info": "拉赞助"},
	{"ID": 1003, "name": "宣传部", "age": "制作海报"}],
	"社团成立年限":"11年"
}
  • 字符串格式

JSON字符串也是在平时开发中使用较多的,json字符串应满足以下条件:

1:它必须是一个字符串,由" "或者' '包裹数据,支持字符串的各种操作。

2:里面的数据格式应该要满足其中一个格式,可以是json对象,也可以是json对象数组或者是两种基本形式的组合变形。

在JSON格式中可以与对象互相嵌套    [元素1,元素2...]

举个例子:

{
               "name":"王路飞",
               "age":22,
               "friends":["刘索隆","三治","娜美","乌索普",{
               "name":"弗兰奇",
                "info":"是个改造人,拥有很炫酷的机甲"
               }],
              "opponents":{
               "name":"黑胡子",
               "info":"四皇"
               }
}

正是因为有了这种数组跟对象互相嵌套的的格式,使得JSON的数据具有很高的括展性,但是有时候JSON数据会非常的多,程序员看的眼花缭乱的,很难用肉眼分清楚它的内部数据层次结构,这时候我们需要借助JSON校验格式化工具,为了下面方便对JSON数据格式进行我在这里提供一个网址https://www.sojson.com/simple_json.html

提供一个JSON格式的数据

{
    "code": "10000",
    "charge": false,
    "remain": 0,
    "msg": "查询成功",
    "result": {
      "garbage_info": [
        {
          "cate_name": "湿垃圾",
          "city_id": "310000",
          "city_name": "上海市",
          "confidence": 0.780099213,
          "garbage_name": "坚果炒货",
          "ps": "投放建议:容器与外包装为可回收物"
        }
      ],
      "message": "success",
      "status": 0
    }
}
                            

然后对上面的数据进行校验的,当我们少打一个“}”时,右上边会有错误信息,下边的黑方格是出错的地方,改正之后,数据格数的层次会在右边按层级显示。(这里只举了一个错误发生的案例)

  • JSON做什么?

将Java中的对象 快速的转换为 JSON格式的字符串。

将JSON格式的字符串, 转换为Java的对象。

JSON与对象之间实现数据转化有两种方式,一种是谷歌公司提供的的Gson,一种是阿里公司提供的FastJson,下面对两种方法的使用分别展开介绍。

  • Gson

  • 将对象转换为JSON字符串

转换JSON字符串的步骤:

首先去网上下载好需要导入的jar包   (可以去官网下载最新版本,也可以在csdn上收索下载链接

1. 引入JAR包--gson-2.8.6.jar

2. 在需要转换JSON字符串的位置编写如下代码即可: String json = new Gson().toJSON(要转换的对象);(这个地方用的匿名内部类,主要就是节省内存空间,但是匿名内部类调用方法只能使用一次,当程序员想要再次通过此类调用方法时,要重新声明或者再次使用匿名内部类)

也可以走常规路径: 

         Gson gson = new Gson();
        //2.创建图书对象
        Book book = new Book("1001","数据库系统原理","数据库入门必修课程");
        //3.将Book对象转换成JSON
        String s = gson.toJson(book);

案例:

public class Book {
    private String id;//编号
    private String name;//书名
    private String info;//书的介绍

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

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

    public Book() {
    }

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

    @Override
    public String toString() {
        return "Book{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }
}
import com.google.gson.Gson;

public class TestJSON {
    public static void main(String[] args) {
        //1.创建Gson对象
        Gson gson = new Gson();
        //2.创建图书对象
        Book book = new Book("1001","数据库系统原理","数据库入门必修课程");
        //3.将Book对象转换成JSON
        String s = gson.toJson(book);
        System.out.println(s);

    }
}

输出结果:

  • 将JSON字符串转换为对象

引入JAR包后,在需要转换Java对象的位置, 编写如下代码: 对象 = new Gson().fromJson(JSON字符串,对象类型.class);

案例:

import com.google.gson.Gson;

public class TestJSON {
    public static void main(String[] args) {
        //1.创建Gson对象
        Gson gson = new Gson();
        //{"id":"1001","name":"数据库系统原理","info":"数据库入门必修课程"}
        Book book = gson.fromJson("{\"id\":\"1001\",\"name\":\"数据库系统原理\",\"info\":\"数据库入门必修课程\"}", Book.class);
        System.out.println(book.getId());
    }
}

输出结果:

  • FastJson

  • 将对象转换为JSON字符串

转换JSON字符串的步骤:

1. 引入JAR包-------fastjson-1.2.70.java

2. 在需要转换JSON字符串的位置编写如下代码即可: String json=JSON.toJSONString(要转换的对象);

  • 将JSON字符串转换为对象

1. 引入JAR包-------fastjson-1.2.70.java

2. 在需要转换Java对象的位置, 编写如下代码:
对象类型     类型 对象名=JSON.parseObject(JSON字符串, 类型.class);

数组类型     List<类型> list=JSON.parseArray(JSON字符串,类型.class);

案例:

public class Book {
    private String id;//编号
    private String name;//书名
    private String info;//书的介绍

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

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

    public Book() {
    }

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

    @Override
    public String toString() {
        return "Book{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }
}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.List;
public class TestJSON {
    public static void main(String[] args) {

        System.out.println("--------fastJSON将对象转换成JOSN格式--------");
        Book book = new Book("10002","网络安全","一本介绍网络运行规则的书");
        //1.创建fastGson对象
        String json= JSON.toJSONString(book);
        System.out.println(json);
        System.out.println("--------fastJSON将JOSN格式转换成对象--------");
        String s="{\"id\":\"10002\",\"info\":\"一本介绍网络运行规则的书\",\"name\":\"网络安全\"}";
       // StringEscapeUtils.unescapeJava(String data);
        Book book1 = JSON.parseObject("{\"id\":\"10002\",\"info\":\"一本介绍网络运行规则的书\",\"name\":\"网络安全\"}", Book.class);
        //json字符串与javaBean之间的转换可以使用 TypeReference<T> 这个类
        Book book2 = JSON.parseObject(s,new TypeReference<Book>(){});
        //  数组类型     List<类型> list=JSON.parseArray(JSON字符串,类型.class);
        List<String> books = JSON.parseArray("[\"id\",\"10002\",\"info\",\"一本介绍网络运行规则的书\",\"name\",\"网络安全\"]",String.class);
        System.out.println(book1);
        book2.setName("HTML语法编程");
        System.out.println(book2.getName());
        System.out.println("book2修改后的变成:"+book2);
        for (String b: books) {
            System.out.print(b+"\t");

        }

    }
}

输出结果:

 

用数组类型时注意三个情况:

1.JSON.parseArray(JSON字符串,类型.class);中的字符串不再用“ { }”进行封装,而是用"[ ]"。

报错:

2.SON.parseArray(JSON字符串,类型.class);中字符串不再是键值对的形式,而是变成全部用“  , ”隔开。

将上面JSON.parseArray("[\"id\",\"10002\",\"info\",\"一本介绍网络运行规则的书\",\"name\",\"网络安全\"]",String.class);中字符串中从开始位置数到七位,然后将第七位的内容改成“ :   ”,也就是\"id\"\"10002\",键值对的形式表示,会出第七个位置数据不合理的错误。

报错:

3.注意List传递的类型不要设置为类,最好使用String。

报错:

上一篇:XML的使用

下面推一篇XML和JSON的区别比较:

https://blog.csdn.net/qq21497936/article/details/92964914?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162193066616780262534804%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162193066616780262534804&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-2-92964914.pc_search_result_cache&utm_term=xml%E5%92%8Cjson%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值