java与JSON语法及解析

本文详细介绍了JSON的基本概念、语法格式,包括对象和数组的表示,并通过案例对比了JSON与Java对象、XML的差异。同时,文章深入探讨了在Java中如何使用Gson和fastJson库进行JSON与Java对象之间的转换,提供了具体的代码示例,帮助开发者更好地理解和应用JSON。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON

简介:

  • JSON全称是JavaScript Object Notation,js对象简谱。
  • JSON是一种 轻量级、基于文本的数据交换格式。
  • JSON十分便于阅读和书写,相比XML,文件更小,所以现在大部分开发人员都在使用JSON交换格式。

JSON语法格式

对象格式

  • 一个对象,由一个大括号{}表示
    – 括号描述对象的属性
    – 通过键值对(name:value)来描述对象的属性

  • 格式:
    键与值之间用冒号(:)连接,多个键值对之间使用逗号(,)分隔
    键值对的应使用引号""引住(通常Java解析时,键不使用引号会报错,而JS能正确解析)
    键值对的,可以时JS中的任意类型的数据

案例:
接下来做一个对比:
java中对象的格式:

class Book{
private String name;
private String info;

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

    public void setInfo(String info) {
        this.info = info;
    }
}
Book book = new Book();
book.setName("平凡的世界");
book.setInfo("展示了普通人在大时代历史进程中所走过的艰难曲折的道路");

XML中对象的格式:

<book>
	<name>平凡的世界</name>
	<info>展示了普通人在大时代历史进程中所走过的艰难曲折的道路</info>
</book>

js中对象的格式:

var book = new Object();
book.name = "平凡的世界";
book.info = "展示了普通人在大时代历史进程中所走过的艰难曲折的道路";

JSON的对象格式:

{
	"name":"平凡的世界",
	"info":"展示了普通人在大时代历史进程中所有走过的艰难曲折的道路"
}

数组格式

  • 数组(Array)用方括号[]表示,
  • 在JSON格式中可以与对象相互嵌套
  • [元素1,元素2...]

案例:

{
	"name":"小白",
	"age":18,
	"friend":["小红","小兰","小花",{
			 "name":"大白",
			 "info":"专注于java技术研究领域"	
				}]
}

Java与JSON

前面已经说了一些JSON的基础语法格式,那么到这里,就来说一下Java与JSON之间是做什么?

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

在Java中用于解析JSON的库就目前来说还没有内置,这就需要外部去引入一些.jar包,在这里就介绍两个最常用的.jar包。
JSON解析包:GsonfastJson

Gson

什么是Gson?

Gson是谷歌官方推出的Java库,可用于将Java对象转换为其JSON表示。也可以用于将JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。支持 JSON与Java对象相互转换的 Java序列化和反序列化 。

优点

  • 提供简单的toJson()fromJson()方法,将Java对象到JSON,将JSON到Java对象
  • 允许预先存在的不可修改对象与JSON相互转换
  • 对Java泛型的广泛支持
  • 允许对象的自定义表示
  • 支持任意复杂的对象(具有深层继承层次结构和泛型类型的广泛使用)

下载

  1. 可百度搜索Gson,下载最新版本
    在这里插入图片描述

  2. 或者点击链接:Gson的Github开源地址

找到Download,点击Gson jar downloads
在这里插入图片描述

3.在弹出另一个窗口,看到右边有个Downloads点击,然后选择jar
在这里插入图片描述
4.如果在官网下载不了,也可在我的网盘下(目前最新版本为gson-2.8.7.jar):
链接:https://pan.baidu.com/s/1KnFancmRmDd8YJtvmYN1gA
提取码:9jrt

将对象转为JSON字符串

转换JSON字符串的步骤:
  1. 引入JAR包
    在这里插入图片描述
    具体引入可参考:其中有介绍如何引入jar包

  2. 在需要转换JSON字符串的位置编写如下代码即可:

 String json = new Gson().toJSON(要转换的对象);
案例
import com.google.gson.Gson;

public class Demo {
    public static void main(String[] args) {
        //1.    创建Gson对象
        Gson gson = new Gson();
        //2.    对象 转换为 JSON
        Book book = new Book(1001,"金苹果","种植苹果的心酸历程");
        String s = gson.toJson(book);
        System.out.println(s);//{"id":1001,"name":"金苹果","info":"种植苹果的心酸历程"}
    }
    static class Book {
        private int id;
        private String name;
        private String info;

        public Book() {
        }

        public Book(int 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 + '\'' +
                    '}';
        }
    }
}

将JSON字符串转换为对象

步骤
  1. 引入JAR包

  2. 在需要转换Java对象的位置,编写如下代码:

对象 = new GSON().fromJson(JSON字符串,对象类型.class);
案例
import com.google.gson.Gson;
import java.awt.print.Book;

public class Demo1 {
    public static void main(String[] args) {
        //1.    创建Gson对象
        Gson gson = new Gson();
        //2.    转换  {"id":1001,"name":"金苹果","info":"种植苹果的心酸历程"} 为 对象
        Book book = gson.fromJson("{\"id\":1001,\"name\":\"金苹果\",\"info\":\"种植苹果的心酸历程\"}", Book.class);
        System.out.println(book);//Book{id=1001, name='金苹果', info='种植苹果的心酸历程'}
    }
}
将JSON字符串转换为集合
import com.google.gson.Gson;

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

public class Demo3 {
    public static void main(String[] args) {
        //1.    创建Gson对象
        Gson gson = new Gson();
        //2.    转换  {"id":1001,"name":"金苹果","info":"种植苹果的心酸历程","page":["锄禾日当午","汗滴禾下土","谁知盘中餐","粒粒皆辛苦"]} 为集合
        HashMap map = gson.fromJson(
                "{\"id\":1001," +
                        "\"name\":\"金苹果\"," +
                        "\"info\":\"种植苹果的心酸历程\"," +
                        "\"page\":[\"锄禾日当午\"," +
                                    "\"汗滴禾下土\"," +
                                    "\"谁知盘中餐\"," +
                                    "\"粒粒皆辛苦\"]}", 
                        HashMap.class);
        System.out.println(map);//{name=金苹果, id=1001.0, page=[锄禾日当午, 汗滴禾下土, 谁知盘中餐, 粒粒皆辛苦], info=种植苹果的心酸历程}
        System.out.println(map.get("page"));//[锄禾日当午, 汗滴禾下土, 谁知盘中餐, 粒粒皆辛苦]
        System.out.println(map.get("page").getClass());//class java.util.ArrayList
        List page = (List) map.get("page");
        System.out.println(page.get(1));//汗滴禾下土
    }
}

fastJson

什么是fastJson?

fastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

fastJson的优点

  1. 速度快:相对其它JSON库的特点是快。
  2. 使用广泛:fastJson在阿里巴巴大规模使用,在数万台服务器上部署,在业界被广泛接受。
  3. 测试完备:fastJson有非常多的testcase,在1.2.11版本中,testcase超过3321个。
  4. 使用简单:fastJson的API十分简洁。

String text = JSON.toString(obj);//序列化
VO vo = JSON.parseObject("{…}",VO.class);//反序列化

  1. 功能完备:支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

fastJson下载

  1. 阿里巴巴fastJson的GitHub开源地址

  2. 也可以百度搜索fastJson,如下图:
    在这里插入图片描述

  3. 载GitHub页面滑到下面,找到Download点击the latest JAR即可下载最新版本
    在这里插入图片描述

  4. 如果下载不了,可以复制下面链接提取(目前最新版本fastjson-1.2.78.jar)
    链接:https://pan.baidu.com/s/1IRPPzz2L4auCrAXZM7Nm0w
    提取码:rrp8

将对象转换为JSON字符串

转换JSON字符串的步骤
  1. 引入JAR包

在这里插入图片描述

  1. 在需要转换JSON字符串的位置编写如下代码即可:
String json = JSON.toJSONString(要转换的对象);
案例
import com.alibaba.fastjson.JSON;

public class Demo4 {
    public static void main(String[] args) {
        Book book = new Book(1002,"平凡的世界","展示了普通人在大时代历史进程中所走过的艰难曲折的道路");
        //1.    转换
        String json = JSON.toJSONString(book);
        System.out.println(json);
        //打印:{"id":1002,"info":"展示了普通人在大时代历史进程中所走过的艰难曲折的道路","name":"平凡的世界"}
    }
}

.

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

public class Demo5 {
    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);//Book{id=1002, name='平凡的世界', info='展示了普通人在大时代历史进程中所走过的艰难曲折的道路'}
        System.out.println(book.getId());//1002
        System.out.println(book.getName());//平凡的世界
        System.out.println(book.getInfo());//展示了普通人在大时代历史进程中所走过的艰难曲折的道路
    }
}
将JSON字符串转换为集合
import com.alibaba.fastjson.JSON;

import java.util.List;

public class Demo6 {
    public static void main(String[] args) {
        //1.    转换  ["床前明月光","疑是地上霜","举头望明月","低头思故乡"]
        List<String> array = JSON.parseArray("[\"床前明月光\",\"疑是地上霜\",\"举头望明月\",\"低头思故乡\"]", String.class);
        System.out.println(array.get(0));//床前明月光
        System.out.println(array);//[床前明月光, 疑是地上霜, 举头望明月, 低头思故乡]
    }
}

总结

  1. 当要使用谷歌的JSON解析库时,只需引入Gson库
  2. 当要使用阿里巴巴的JSON解析库时,只需引入fastJson库
  3. 最好下载最新版本的jar包
  4. 关于Gson与fastJson的选择:Gson相对稳定,fastJson在国内使用广泛

相关链接:这里有关于引入jar包的具体步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值