JSON的简介与使用

目录

一、概述

二、JSON的对象与数组

1、json的对象表示

2、json的数组表示

三、JSON在java中的使用

1、Gson

2、FastJson


一、概述

  • JSON(JavaScript Object Notation)
    • 指的是JS对象简谱,是一种轻量级的数据交换格式
      • 是欧洲计算机协会制定的JavaScript规范,与java语言无关
      • 数据交换格式指的是客户端与服务器、程序与程序之间在数据交换时的数据格式
    • 采取了完全独立于编程语言的文本格式来存储数据
  • 常用于数据传输
  • 相较于XML的优点
    • 程序员解析json比解析xml简单
    • 机器解析json的效率比xml快
    • 数据传输时,json所占的空间更小,网络的传输速度更快

二、JSON的对象与数组

1、json的对象表示

  • json中的对象由一个大括号表示
    • 括号中描述对象的属性
      • 对象的属性通过键值对来描述,可以理解为大括号中包含的是一个个键值对
  • 格式
    • 键与值之间使用冒号连接,多个键值对之间使用逗号分隔
    • 键值对的键应使用引号引住
      • 通常java解析时,键不使用引号会报错,而JavaScript(以下简称js)能正确解析
      • 也就是说,建议键值对的键用引号引住
    • 键值对的值,可以是js中的任意类型数据
    • 对象中键值对的值,可以是对象,也可以数组
      • 即可以和数组嵌套使用
  • 举例
    • 见下面json数组中的例子

2、json的数组表示

  • json中的数组用中括号表示,可以与对象相互嵌套
  • 格式
    • [元素1,元素2...]
  • 举例
    • 最外层的大括号表示一个对象,对象内有5个属性:name、age、pengyou、info、嘿嘿
    • 其中,pengyou属性是一个数组,数组内部又有一个对象,即大括号代表的部分
    • heihei属性表示的也是一个对象
{
  "name":"小明",
  "age":18,
  "pengyou":["张三","李四","王二","麻子",{"name":"ovo",
  "info":"像匹野马一样狂奔在技术钻研的道路上"}],
  "heihei":{
  "name":"大长刀",
  "length":"40m"
  }
}

三、JSON在java中的使用

  • java与json的关系
    • 可以将java中的对象快速的转换为json格式的字符串
    • 可以将json格式的字符串转换为java的对象
  • java与json的转换通常会借助第三方的工具类,这里介绍谷歌的Gson和阿里的FastJson
    • 第三方库可以选择使用maven配置,或者去GitHub上下载开源的jar包

1、Gson

  • 将对象转换为json字符串的步骤
    • 导入jar包
    • 在需要转换json字符串的位置编写如下代码
String json = new Gson().toJSON("要转换的对象");

案例:
Book b = BookDao.find();
String json = new Gson().toJson(b);
System.out.println(json);
  • 将json字符串转换为对象的步骤
    • 导入jar包
    • 在需要转换java对象的位置编写如下代码
对象 = new Gson().fromJson(JSON字符串,对象类型.class);

案例:
String json = "{\"id\":1,\"name\":\"金苹果\",\"author\":\"李伟杰
\",\"info\":\"嘿嘿嘿嘿嘿嘿\",\"price\":198.0}";
Book book = new Gson().fromJson(json, Book.class);
System.out.println(book);
  • 举例
    • 通过例子我们会发现,json转对象时,如果数据代表的对象不存在,我们可以使用HashMap替代
    • json数据中的数组,转换为对象后是ArrayList,而不是数组
import com.google.gson.Gson;

import java.util.HashMap;

public class demo1 {
    //测试Gson
    public static void main(String[] args) {
        Student student = new Student("张三", 18);
        //将对象转化为json数据
        String json1 = new Gson().toJson(student);
        System.out.println(json1); //{"name":"张三","age":18}

        //将json数据转化为student对象
        String text = "{\"name\":\"张三\",\"age\":18}";
        Student student1 = new Gson().fromJson(text, Student.class);
        System.out.println(student1); //Student{name='张三', age=18}

        //将json数据(含数组)转化为对象
        //json数据:{"name":"小李","age":18,"page":["第一页","第二页","第三页","第四页"]}
        String text2 = "{\"name\":\"小李\",\"age\":18,\"page\":[\"第一页\",\"第二页\",\"第三页\",\"第四页\"]}";
        HashMap data = new Gson().fromJson(text2, HashMap.class);
        System.out.println(data.get("page")); //[第一页, 第二页, 第三页, 第四页]
        System.out.println(data.get("page").getClass()); //class java.util.ArrayList
    }
}

2、FastJson

  • 将对象转换为JSON字符串的步骤
    • 导入jar包
    • 在需要转换JSON字符串的位置编写如下代码
String json = JSON.toJSONString(要转换的对象);

案例:
Book b = BookDao.find();
String json=JSON.toJSONString(b);
System.out.println(json);
  • 将JSON字符串转换为对象的步骤
    • 导入jar包
    • 在需要转换Java对象的位置 编写如下代码
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);

案例:
String json = "{\"id\":1,\"name\":\"金苹果\",\"author\":\"李伟杰
\",\"info\":\"嘿嘿嘿嘿嘿嘿\",\"price\":198.0}";
Book book = JSON.parseObject(json, Book.class);
System.out.println(book);
  • 举例
import com.alibaba.fastjson.JSON;

import java.util.HashMap;
import java.util.List;

public class demo2 {
    //测试FastJson
    public static void main(String[] args) {
        Student student = new Student("张三", 18);
        //将对象转换为json
        String s = JSON.toJSONString(student);
        System.out.println(s); //{"age":18,"name":"张三"}

        //将json字符串转换为对象
        Student s2 = JSON.parseObject("{\"age\":18,\"name\":\"张三\"}", Student.class);
        System.out.println(s2.getName()); //张三

        //将json数据(含数组)转化为HashMap集合
        //json数据:{"name":"小李","age":18,"page":["第一页","第二页","第三页","第四页"]}
        String text2 = "{\"name\":\"小李\",\"age\":18,\"page\":[\"第一页\",\"第二页\",\"第三页\",\"第四页\"]}";
        HashMap hashMap = JSON.parseObject(text2, HashMap.class);
        System.out.println(hashMap.get("page")); //["第一页","第二页","第三页","第四页"]
        System.out.println(hashMap.get("page").getClass()); //class com.alibaba.fastjson.JSONArray

        //将json数据(数组)转化为List集合
        //数组:["你叉叉","穷哈哈","哈利波特骑着扫帚飞"]
        String text3 = "[\"你叉叉\",\"穷哈哈\",\"哈利波特骑着扫帚飞\"]";
        List<String> strings = JSON.parseArray(text3, String.class);
        System.out.println(strings); //[你叉叉, 穷哈哈, 哈利波特骑着扫帚飞]
        System.out.println(strings.getClass()); //class java.util.ArrayList
    }
}

猜你喜欢

转载自blog.csdn.net/future_god_qr/article/details/121273746