JSON解析初学

前言

这篇博客只为自学复习,如果大家有想要学习JSON的可以把此篇博客当成初学难度,当成学习的跳板,这里建议大家,在学习此篇JSON解析后,对JSON有了一定的了解后,可以转到这两处进行更进一步的学习,逆境都是为了学习,我这篇实力有限,尽量展示,如有不好的,大家可以评论留言
链接:超详细JSON解析步骤
链接:JSON三种数据解析方法

JSON简介

  1. JAVAScript Object Notation是一种轻量级的数据交换格式
  2. 具有良好的可读和便于快速编写的特性。
  3. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)
  4. JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org
  5. JSON作为数据是目前网络中主流的数据传输格式之一,应用十分广泛,说是使用率达到99%一点也不勉强。

Java与JSON

那我们在每次学习新的知识的时候,就要对自己说,我们不光要学的是知识,还要有实践,==毕竟实践出真知,实践是检验真理的唯一标准。==所以我们学习JSON到底要干什么?

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

总所周知,JSON是Douglas Crockford在2001年开始推广使用的数据格式,在2005年-2006年正式成为主流的数据格式,雅虎和谷歌就在那时候开始广泛地使用JSON格式。

任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

JSON语法

JSON 语法是 JavaScript 语法的子集。

JSON 语法规则

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号 {} 保存对象
  • 中括号 [] 保存数组,数组可以包含多个对象

JSON 名称/值对

JSON 数据的书写格式是:

key : value

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"name" : "法外狂徒张三"

这很容易理解,等价于这条 JavaScript 语句:

name = "法内狂徒罗翔"

开玩笑的,憋当真啊,我还是很敬重我们的罗老师的,毕竟他教会了我很多可以"不违法",但道德
不提倡的各种紧急避险,我很爱罗老师。

JSON 值

JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

JSON 数字

JSON 数字可以是整型或者浮点型:

{ "age":30 }

JSON 对象

JSON 对象使用在大括号{}中书写。
对象可以包含多个 key/value(键/值)对。
key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
key 和 value 中使用冒号(:)分割。
每个 key/value 对使用逗号(,)分割。

{key1 : value1, key2 : value2, … keyN : valueN }

对象可以包含多个名称/值对:

{ "name":"一本好书" ,"introduce":"金色的瓶子中有一朵梅花" }

这一点也容易理解,与这条 JavaScript 语句等价:

name = "一本好书"
introduce= "金色的瓶子中有一朵梅花"

JSON 数组

SON 数组在中括号[]中书写。

JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

JavaScript 中,数组值可以是以上的 JSON 数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined。
数组可包含多个对象:

[
    { key1 : value1-1 , key2:value1-2 }, 
    { key1 : value2-1 , key2:value2-2 }, 
    { key1 : value3-1 , key2:value3-2 }, 
    ...
    { keyN : valueN-1 , keyN:valueN-2 }, 
]

这段代码就是两者进行了简单的嵌套

{
    "sites": [
        { "name":"一本好书" ,"introduce":"金色的瓶子中有一朵梅花"}, 
        { "name":"也是好书" ,"introduce":"品花宝鉴" }, 
        { "name":"还是好书" ,"introduce":"隔帘花影"},
        {"name":"真是好书" ,"introduce":"杏花天"}
    ]
}

在上面的例子中,对象 sites 是包含三个对象的数组。每个对象代表一条关于某个历史好书(name、introduce)的记录。

JSON 布尔值

JSON 布尔值可以是 true 或者 false:

 { "flag":true }

JSON null

JSON 可以设置 null 值:

{ "runoob":null }

JSON 使用 JavaScript 语法

因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。
通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:

var sites = [
   		{ "name":"一本好书" ,"introduce":"金色的瓶子中有一朵梅花"}, 
        { "name":"也是好书" ,"introduce":"品花宝鉴" }, 
        { "name":"还是好书" ,"introduce":"隔帘花影"},
        {"name":"真是好书" ,"introduce":"杏花天"}
];

JSON vs XML

那其实我在刚刚也说了,JSON是在2005年左右才正式成为主流,那之前的主流就是XML。那就是到了现在其实在有些大的公司的老程序员也还是有在使用XML的。
那不管他们是如何,我们的学习目的是不变的。我们在学习JSON的时候总是会不可避免的接触学习一下XML。
JSON 和 XML 都用于接收 web 服务端的数据。
JSON 和 XML在写法上有所不同,如下所示:
JSON 实例

{
    "sites": [
        { "name":"一本好书" ,"introduce":"金色的瓶子中有一朵梅花"}, 
        { "name":"也是好书" ,"introduce":"品花宝鉴" }, 
        { "name":"还是好书" ,"introduce":"隔帘花影"},
        {"name":"真是好书" ,"introduce":"杏花天"}
    ]
}

XML 实例


<sites>
  <site>
    <name>一本好书</name> <introduce>金色的瓶子中有一朵梅花</introduce>
  </site>
  <site>
    <name>也是好书</name> <introduce>品花宝鉴</introduce>
  </site>
  <site>
    <name>还是好书</name> <introduce>隔帘花影</introduce>
  </site>
  <site>
    <name>真是好书</name> <introduce>杏花天</introduce>
  </site>
</sites>

JSON 与 XML 的相同之处:

  • JSON 和 XML 数据都是 “自我描述” ,都易于理解。
  • JSON 和 XML 数据都是有层次的结构
  • JSON 和 XML 数据可以被大多数编程语言使用

JSON 与 XML 的不同之处:

  • JSON 不需要结束标签
  • JSON 更加简短
  • JSON 读写速度更快
  • JSON 可以使用数组

最大的不同是:XML 需要使用 XML 解析器来解析,JSON 可以使用标准的 JavaScript 函数来解析。

为什么 JSON 比 XML 更好?

XML 比 JSON 更难解析。

JSON 可以直接使用现有的 JavaScript 对象解析。

针对 AJAX 应用,JSON 比 XML 数据加载更快,而且更简单:

使用 XML

  • 获取 XML 文档
  • 使用 XML DOM 迭代循环文档
  • 接数据解析出来复制给变量

使用 JSON

  • 获取 JSON 字符串
  • JSON.Parse 解析 JSON 字符串

Gson解析

Gson是谷歌官方推出的支持 JSON -- Java Object相互转换的 Java序列化/反序列化 库。GSON弥补了JSON的许多不足的地方,在实际应用中更加适用于Java开发。在这里,我们主要讲解的是利用GSON来操作java对象和json数据之间的相互转换。
好,在开始正题之前我为大家提供两个jar包,来更好的使用Gson与FastJson(之后会讲)。
在这里插入图片描述
大家可以在Module中创建一个lib的Directory来存放我们的jar包,当然需要导入我们的本地Librarary。
我们可以直接在下载好jar后复制到lib下,然直接这样
在这里插入图片描述
Add as Library就可以了。那这两个jar包,我们可以直接去官网上找都是开源的或者我这里有链接,应该是可以。
gson下载然后找DownLoad就下载就好了
fastjson下载地址:含历史版本和最新版本
这也算是练习一下导包,以后说不定经常遇到。

那接下来的案例源码会比较简单,只是为了学习,不要过于注重代码量,逻辑。
对了,我们在编写的勤勉需要一个JavaBeans的Book类来支持调用。

package com.java.demo2;

import java.util.Objects;

/**
 * @Author: King-lby
 */
public class Book {
    private String id;
    private String name;

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

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

    public Book() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return Objects.equals(id, book.id) &&
                Objects.equals(name, book.name) &&
                Objects.equals(info, book.info);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, 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;
    }

    private String info;
}

最常规的JavaBean了,构造方法,setter、getter、toString等等都有。

将对象转换为JSON字符串

转换JSON字符串的步骤:

  1. 引入JAR包
  2. 在需要转换JSON字符串的位置编写如下代码即可:
    String json = new Gson().toJSON(要转换的对象);
/**
 * @Author: King-lby
 */
public class Demo1 {
    /**
     * Gson
     * @param args
     */
    public static void main(String[] args) {
        //将对象转换为JSON字符串
       /* //1. 创建Gson对象
        Gson g = new Gson();
        //2. 转换
        Book b = new Book("100","金苹果","种植苹果真辛苦");
        String s = g.toJson(b);
        System.out.println(s);*/

        //如果只使用一次,可以转换为匿名对象
        Book b = new Book("100","金苹果","种植苹果真辛苦");
        String s = new Gson().toJson(b);
        System.out.println(s);
    }
}

运行结果:
在这里插入图片描述

将JSON字符串转换为对象

  1. 引入JAR包
  2. 在需要转换Java对象的位置, 编写如下代码:
    对象 = new Gson().fromJson(JSON字符串,对象类型.class);
/**
 * @Author: King-lby
 */
public class Demo2 {
    /**
     * Gson
     * @param args
     */
    public static void main(String[] args) {
        //将JSON字符串转换为对象
        //1. 创建Gson对象
        Gson g = new Gson();
        //2. 转换
        Book b = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\"}", Book.class);
        System.out.println(b);

        //如果只使用一次,可以转换为匿名对象,可以自行探索。

    }
}

运行结果:
在这里插入图片描述

将JSON字符串转换为数组

//搞后端开发的兄弟会大量频繁的使用JSON
/**
 * @Author: King-lby
 */
public class Demo3 {
    /**
     * Gson
     * @param args
     */
    public static void main(String[] args) {
        //将JSON字符串转换为数组
        //1. 创建Gson对象
        Gson g = new Gson();
        //2. 转换 :   {"id":"100","name":"金苹果","info":"种植苹果真辛苦","page":["锄禾日当午","汗滴禾下土","呵呵呵呵呵"]}
        HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"呵呵呵呵呵\"]}", HashMap.class);
        System.out.println(data.get("page").getClass());
        System.out.println(data.get("page"));//数组会转换成ArrayList集合
       /* List page = (List) data.get("page");
        System.out.println(page.get(1));*/

    }
}

在这里插入图片描述

FastJson

将对象转换为JSON字符串

那我们的FastJson是由我们马爸爸的阿里研制的,顶。
转换JSON字符串的步骤:

  1. 引入JAR包
  2. 在需要转换JSON字符串的位置编写如下代码即可:
    String json=JSON.toJSONString(要转换的对象);
/**
 * @Author: King-lby
 */
public class Demo4 {
    public static void main(String[] args) {
        //将对象转换为JSON字符串
        Book book = new Book("1002","唐诗三百首","床前明月光,疑是地上霜。举头望明月,低头思故乡");
        //1. 转换
        String json = JSON.toJSONString(book);
        System.out.println(json);
    }
}

运行结果:
在这里插入图片描述

将JSON字符串转换为对象

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

    List<类型> list=JSON.parseArray(JSON字符串,类型.class);
/**
 * @Author: King-lby
 */
public class Demo5 {
    //将JSON字符串转换为对象
    public static void main(String[] args) {
        //1. 转换:    {"id":"1002","info":"床前明月光,疑是地上霜。举头望明月,低头思故乡","name":"唐诗三百首"}
        Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"床前明月光,疑是地上霜。举头望明月,低头思故乡\",\"name\":\"唐诗三百首\"}", Book.class);
        System.out.println(book.getId());//获取id
        System.out.println(book.getInfo());//获取info
        System.out.println(book.getName());//获取name
    }
}

运行结果:
在这里插入图片描述

将JSON字符串转换为数组

/**
 * @Author: King-lby
 */
public class Demo6 {
    //将JSON字符串转换为数组
    public static void main(String[] args) {
        //1. 转换     :   ["一二三","二三四","三四五"]
        List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]",String.class);
        System.out.println(strings.get(1));//下标
    }
}

运行结果:
在这里插入图片描述

总结

这次对于JSON的解析只是最简单的案例源码,如果大家想要更深一步学习,可以直接问度娘,搜索Json,会出现各种Json在线解析,然后大家要找对应的Json格式源码可以搜索:api数据接口,随便点进去一个,找个免费的,往下划拉,会有Json格式的源码。
当然有可能不好搜,这里提供一个API数据接口网站,我们就找天气预报得了。
在这里插入图片描述在这里插入图片描述
同样的,我们可以直接点击蓝色的JSON在线格式化工具
这里就是结果显示,还是很不错的。
在这里插入图片描述

好了,大家可以自行探索了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年,又是你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值