Java基础篇--JSON 几种常用JSON库

这篇具有很好参考价值的文章主要介绍了Java基础篇--JSON 几种常用JSON库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

概述

JSON的形式

JSON作为一个字符串:

JSON作为一组键值对:

JSON解析为Java对象:

常用方法

几种常用JSON库

Gson(还可以)

FastJson(推荐)

Jackson(推荐)

Json-lib(了解既可)

四个库的maven依赖

JSON序列化

JSON反序列化

序列化方法处理流程


概述

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,采用的是键值对的方式,包含对象(或者叫记录、结构、字典、哈希表、有键列表或关联数组等)和数组两种结构。

它的语法规则也比较简单:

  1. 数据都包含在一个名称/值对中,
  2. 数据之间用逗号分隔,
  3. 对象用大括号保存,
  4. 数组用中括号保存。

JSON的这种简单易懂的格式使得它成为了不同语言之间进行数据交换的常用格式,因为大部分现代编程语言都支持键值对的无序集合(对象)值的有序列表(数组)这两种常见的数据结构。

除了语法规则简单,JSON还有其他的优点,比如易于人类阅读和编写,也易于机器解析和生成。这使得JSON成为了一种理想的数据交换语言,被广泛应用于Web服务和API。

JSON的形式

在Java中,JSON通常表示为字符串或者一组键值对。如果JSON是一个字符串,那么它需要被解析成Java对象才能使用。如果JSON是一组键值对,那么它可以直接在Java中使用。

JSON作为一个字符串:

String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";

这个字符串包含了JSON数据。要使用这个数据,我们需要将其解析为一个Java对象。 

JSON作为一组键值对:

Map<String, Object> jsonObject = new HashMap<>();  
jsonObject.put("name", "John");  
jsonObject.put("age", 30);  
jsonObject.put("city", "New York");

这个Map对象包含了同样的JSON数据,但它是在Java中直接使用的。

JSON解析为Java对象:

如果JSON字符串包含了复杂的数据结构,比如数组或者嵌套的对象,那么解析JSON字符串为Java对象会更有用。我们可以使用诸如Jackson或Gson这样的库来将JSON字符串解析为Java对象。

例如,如果我们有一个JSON字符串表示一个用户,如下所示:

String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\", \"friends\":[\"Jane\", \"Tom\"]}";

我们可以创建一个对应的Java类来表示这个用户:

public class User {  
    private String name;  
    private int age;  
    private String city;  
    private List<String> friends;  
    // getters and setters  
}

然后我们可以使用Jackson或Gson库将JSON字符串解析为User对象:

User user = objectMapper.readValue(jsonString, User.class); // 使用Jackson库  
User user = gson.fromJson(jsonString, User.class); // 使用Gson库

这样,我们就可以在Java中使用这个User对象了。 

具体参见:JSON官网

常用方法

在Java中处理JSON数据时,我们经常用到以下常用方法:

  1. JSON.parse(): 将一个JSON字符串转换为Java对象。例如,JSON.parse(jsonString)。
  2. JSON.stringify(): 将一个JavaScript对象转换为JSON字符串。例如,JSON.stringify(jsonObject)。
  3. JSONObject: 这是在处理JSON数据时最常见的类。使用此类,可以创建、解析和操作JSON对象。例如,new JSONObject(jsonString),new JSONObject().put("key", "value")等。
  4. JSONArray: 这是用于处理JSON数组的类。例如,new JSONArray(jsonString),new JSONArray().put("element1").put("element2")等。
  5. has(): 用于检查JSON对象是否包含特定的键。例如,jsonObject.has("key")。
  6. get(): 用于获取JSON对象中特定键的值。例如,jsonObject.get("key")。
  7. opt(): 与get()类似,但该方法返回指定属性的默认值,如果该属性不存在,则返回null。例如,jsonObject.opt("key")。
  8. put(): 用于向JSON对象中添加新的键-值对。例如,jsonObject.put("key", value)。
  9. remove(): 从JSON对象中删除指定键-值对。例如,jsonObject.remove("key")。
  10. toString(): 将JSON对象转换为字符串。例如,jsonObject.toString()。

Java中处理JSON的常用方法有以下几种:

  1. 使用第三方库:最常用的方法是使用第三方JSON处理库,如Jackson、Gson和JSON.simple。这些库提供了简单易用的API,可以方便地将Java对象转换为JSON字符串,以及将JSON字符串解析为Java对象。
  2. 使用Java内置类:Java 8及以上版本提供了javax.json包,其中包含了一些用于处理JSON的内置类,如JsonObject、JsonArray和JsonParser等。这些类提供了基本的JSON解析和生成功能,适用于简单的JSON处理需求。
  3. 手动解析JSON:对于一些较为复杂的JSON结构,也可以手动解析JSON字符串。通过使用字符串操作方法,如split()、substring()和正则表达式等,可以逐层解析JSON字符串,并将其转换为Java对象或其他数据结构。

几种常用JSON库

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,也方便机器解析和生成。它基于ECMAScript的一个子集,用于存储和交换文本信息。

在Java中处理JSON,我们通常使用库来简化工作。常用的库包括:Gson,FastJson,Jackson,Json-lib。

Gson(还可以)

项目地址:GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back

Gson是Google开发的一个开源JSON库,它是一个非常强大的JSON解析库,功能齐全,使用简单,适用于处理大型和复杂的JSON数据。除了toJsonfromJson两个转换函数之外,Gson还提供了许多其他功能,例如自定义序列化和反序列化规则、注解支持等。Gson的优点之一是它具有良好的性能,尽管在某些情况下可能不如其他一些JSON库。此外,Gson的API简单易用,易于上手和使用。它还具有良好的可扩展性,可以通过自定义规则来扩展其功能。

在使用Gson之前,需要先创建对象的类型以及其成员。只要类中有get和set方法,Gson就可以实现复杂类型的json到bean或bean到json的转换。这使得Gson成为JSON解析的神器,被许多公司和用户广泛应用。

总之,Gson是一个功能齐全、使用简单、性能良好且可扩展的Java JSON库,适用于处理大型和复杂的JSON数据。

FastJson(推荐)

项目地址:GitHub - alibaba/fastjson: FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.

Fastjson是一个非常高效的JSON处理库,由阿里巴巴开发并维护。它的设计目标是提供超高的性能以及简单易用的API。Fastjson是用Java编写的,因此它可以无缝地集成到Java项目中。它不需要任何外部的依赖,可以直接运行在任何支持Java的平台上。

Fastjson对于复杂类型的Java Bean转换为JSON的时候有一些问题。这是因为Java的对象模型和JSON的数据模型在表达数据方面有一些不同。在处理复杂类型的Java Bean时,可能会出现一些引用的问题。例如,如果两个Java对象互相引用,那么在转换为JSON时可能会出现问题,因为JSON不支持循环引用。

Fastjson提供了一种解决方案来处理这种问题,那就是使用@Reference注解。通过这个注解,你可以明确指定哪些对象是相互引用的,这样Fastjson就能够正确地处理这些引用。

Fastjson的性能确实非常出色。它使用了独创的算法来优化解析和生成JSON的速度,这使得它在速度上超过了其他所有的JSON库。这使得Fastjson在需要处理大量JSON数据的场景中特别有用。

总的来说,Fastjson是一个非常强大且高效的JSON处理库,适用于需要处理大量JSON数据的Java项目。虽然它对于复杂类型的Java Bean转换可能会有些问题,但是通过使用@Reference注解或者其他解决方案,这些问题可以得到解决。

Jackson(推荐)

项目地址:https://github.com/FasterXML/jackson

Jackson是一个广泛使用的Java开源框架,用于序列化和反序列化JSON。它的社区非常活跃,更新速度也很快。 从Github中的统计来看,Jackson能够成为最流行的JSON解析器之一,Spring MVC的默认json解析器便是Jackson,这归功于它的诸多优点和灵活的API。

以下是Jackson的优点:

  1. Jackson所依赖的jar包较少,简单易用。这使得它在项目的配置和构建过程中相对容易集成。
  2. 与其他Java的JSON框架(如Gson等)相比,Jackson解析大的JSON文件速度比较快。这使得它在处理大型JSON数据时具有更高的性能。
  3. Jackson运行时占用内存比较低,性能比较好。这使得它在处理大量数据时能更有效地利用系统资源。
  4. Jackson有灵活的API,可以很容易进行扩展和定制。这使得开发者可以根据项目的特定需求对Jackson进行定制化配置。

Jackson核心模块包括:

  1. Jackson-core核心包:提供基于“流模式”解析的相关API,包括JsonPaser和JsonGenerator。Jackson内部实现正是通过高性能的流模式API的JsonGenerator和JsonParser来生成和解析json。
  2. Jackson-annotations注解包:提供标准注解功能。
  3. Jackson-databind数据绑定包:提供基于”对象绑定”解析的相关API(ObjectMapper)和”树模型”解析的相关API(JsonNode);基于”对象绑定”解析的API和”树模型”解析的API和依赖基于”流模式”解析的API。

这些模块使得Jackson具有强大的功能和灵活性,能够满足各种不同的JSON处理需求。

Json-lib(了解既可)

项目地址:Maven - Json-lib::Welcome

Json-lib最开始的也是应用最广泛的json解析工具。然而,它有一些缺点:

  1. 依赖于多个第三方包:Json-lib依赖于多个第三方库,这可能会导致项目的依赖管理变得复杂。
  2. 转换缺陷:当将JSON转换为Java对象时,Json-lib可能会出现问题。例如,如果一个类中包含另一个类的列表或映射,从JSON到Java对象的转换就会出现问题。
  3. 功能和性能不足:随着互联网技术的发展和需求的不断增长,对JSON解析工具的要求也越来越高。因此,Json-lib在功能和性能方面无法满足现代应用程序的需求。

四个库的maven依赖

<!-- json-lib -->  
<dependency>  
    <groupId>net.sf.json-lib</groupId>  
    <artifactId>json-lib</artifactId>  
    <version>最新的版本号</version>  
    <classifier>jdk15</classifier>  
</dependency>  
  
<!-- gson -->  
<dependency>  
    <groupId>com.google.code.gson</groupId>  
    <artifactId>gson</artifactId>  
    <version>最新的版本号</version>  
</dependency>  
  
<!-- fastjson -->  
<dependency>  
    <groupId>com.alibaba</groupId>  
    <artifactId>fastjson</artifactId>  
    <version>最新的版本号</version>  
</dependency>  
  
<!-- jackson -->  
<dependency>  
    <groupId>com.fasterxml.jackson.core</groupId>  
    <artifactId>jackson-databind</artifactId>  
    <version>最新的版本号</version>  
</dependency>  
<dependency>  
    <groupId>com.fasterxml.jackson.core</groupId>  
    <artifactId>jackson-annotations</artifactId>  
    <version>最新的版本号</version>  
</dependency>

注意:将上述代码中的"最新的版本号"替换为所要使用的最新版本号。 

JSON序列化

Java的JSON序列化是将Java对象转换成JSON格式的过程。在Java中,有许多库可以用来进行JSON序列化,例如Jackson、Gson和Fastjson等。

以下是一个使用Jackson库进行JSON序列化的示例:

import com.fasterxml.jackson.databind.ObjectMapper;  
  
public class Example {  
    public static void main(String[] args) throws Exception {  
        ObjectMapper objectMapper = new ObjectMapper();  
        Person person = new Person("John", 30);  
        String json = objectMapper.writeValueAsString(person);  
        System.out.println(json);  
    }  
}  
  
class Person {  
    private String name;  
    private int age;  
  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
}

在这个示例中,我们使用ObjectMapper将Person对象转换成JSON字符串。在调用writeValueAsString()方法时,ObjectMapper会自动遍历Person对象的所有字段,并将它们转换成JSON格式。

以下是使用FastJson库进行JSON序列化的示例:

import com.alibaba.fastjson.JSON;  
  
public class Example {  
    public static void main(String[] args) {  
        Person person = new Person("John", 30);  
        String json = JSON.toJSONString(person);  
        System.out.println(json);  
    }  
}  
  
class Person {  
    private String name;  
    private int age;  
  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
}

在这个示例中,我们使用FastJson的JSON类将Person对象转换成JSON字符串。调用toJSONString()方法时,FastJson会自动遍历Person对象的所有字段,并将它们转换成JSON格式。 输出的JSON字符串类似于:

{"name":"John","age":30}

JSON反序列化

JSON反序列化是将JSON格式的数据转换成Java对象的过程。在Java中,有许多库可以用来进行JSON反序列化,例如Jackson、Gson和Fastjson等。

以下是一个使用Jackson库进行JSON反序列化的示例:

import com.fasterxml.jackson.databind.ObjectMapper;  
  
public class Example {  
    public static void main(String[] args) throws Exception {  
        String json = "{\"name\":\"John\",\"age\":30}";  
        ObjectMapper objectMapper = new ObjectMapper();  
        Person person = objectMapper.readValue(json, Person.class);  
        System.out.println(person.getName());  
        System.out.println(person.getAge());  
    }  
}  
  
class Person {  
    private String name;  
    private int age;  
  
    public String getName() {  
        return name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
}

在这个示例中,我们使用ObjectMapper将JSON字符串转换成Person对象。在调用readValue()方法时,ObjectMapper会自动将JSON字符串解析成Java对象。

以下是使用FastJson库进行JSON反序列化的示例:

import com.alibaba.fastjson.JSON;  
  
public class Example {  
    public static void main(String[] args) {  
        String json = "{\"name\":\"John\",\"age\":30}";  
        Person person = JSON.parseObject(json, Person.class);  
        System.out.println(person.getName());  
        System.out.println(person.getAge());  
    }  
}  
  
class Person {  
    private String name;  
    private int age;  
  
    public String getName() {  
        return name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
}

在这个示例中,我们使用FastJson的JSON类将JSON字符串转换成Person对象。调用parseObject()方法时,FastJson会自动将JSON字符串解析成Java对象。输出的结果类似于:

John  
30

序列化方法处理流程

​​​​​​​序列化:把对象转换为字节序列存储于磁盘或者进行网络传输的过程称为对象的序列化。
反序列化:把磁盘或网络节点上的字节序列恢复到对象的过程称为对象的反序列化。

基本流程为:

  1. 构建参数类型对象:首先,需要构建通用序列化基础方法所需要的参数类型对象。这些对象将用于指定要序列化的类的字段和属性。
  2. 分析序列化类型:接下来,需要对序列化类型进行分析。这可以通过注解或"get方法名(比如getXxx,isXxx)"等方式来完成。根据分析结果,可以确定需要序列化的类的属性。
  3. 反射机制处理属性:通过反射机制,可以获取到类的所有属性,并针对每个属性进行处理。对于每个属性,需要获取其对应的值,并调用相应的getter方法(如果有的话)来获取属性的值。
  4. 拼接字符串:在获取到所有属性的值之后,需要将这些值拼接成一个字符串。这个过程中,会根据属性的类型写入一些开始和结束符号,例如"{"和"}"。然后,将步骤3中解析得到的设值信息嵌入到这些符号之间。
  5. 返回最终的字符串内容:完成字符串拼接后,序列化方法将返回最终的字符串内容。这个字符串就是对象的序列化表示,可以将其存储到磁盘或进行网络传输。

在反序列化的过程中,首先需要将字节序列解析为对象的状态信息,然后通过反序列化工具类将其恢复为对象。

这个过程就是序列化和反序列化的基本流程。文章来源地址https://www.toymoban.com/news/detail-682890.html

到了这里,关于Java基础篇--JSON 几种常用JSON库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java hutool工具类处理json的常用方法

    Hutool 提供了丰富的 JSON 处理工具类,包括 JSON 字符串的解析、生成、对象与 JSON 字符串的转换等。以下是 Hutool 中关于 JSON 的常用方法: JSON 字符串的解析与生成: JSONUtil.parseObj(jsonStr) :将 JSON 字符串解析为 JSONObject 对象。 JSONUtil.parseArray(jsonStr) :将 JSON 字符串解析为 JSON

    2024年04月17日
    浏览(47)
  • java中对象转json字符串的常用方式

    1.使用Jackson库: Jackson是一个常用且功能强大的Java库,用于处理JSON数据。下面是使用Jackson将对象转换为JSON字符串的示例: 需要依赖: 2.使用Gson库: Gson是Google提供的一个Java库,它可以处理JSON数据的序列化和反序列化。以下是使用Gson将对象转换为JSON字符串的示例 相关依赖

    2024年02月07日
    浏览(48)
  • Java后端开发——Ajax、jQuery和JSON

    Ajax全称是Asynchronous Javascript and XML,即异步的JavaScript和 XML。Ajax是一种Web应用技术,该技术是在JavaScript、DOM、服务器配合下,实现浏览器向服务器发送异步请求。 Ajax异步请求方式不向服务器发出请求,会得到数据后再更新页面(通过DOM操作修改页面内容),整个过程不会发

    2024年02月03日
    浏览(51)
  • Java开发者的Python进修指南:JSON利器之官方json库、demjson和orjson的实用指南

    JSON作为目前最流行的传输格式,在Python中也有相应的实现方式。由于JSON格式的文本可以跨平台并且简单易用,因此被广泛传播。因此,我们今天的主要讨论内容是如何熟练地应用Python的JSON库来处理将JSON映射到文本,以及如何从文本映射到对象中。现在,让我们开始探讨这个

    2024年01月23日
    浏览(64)
  • Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)

    1.新建一个JavaWeb项目hslcalweb,设置tomcat10。 2.创建房贷计算器JavaBean:HslCalBean.java,增加以下的属性,并生成Getter/Setter方法。 3.生成默认和带三个已知参数的构造方法。 4.增加计算器的计算方法cal() 6.新建一个控制器Servlet:HslCalServlet.java,映射的URL:/hslcal,从浏览器输入参数调

    2024年02月08日
    浏览(35)
  • java将json字符串转换成json数组

    有些时候我们需要将json字符串转换成数组,并且只取一些属性值进行下一个方法的赋值,这样就涉及到了json字符串的转换了, json字符串有两种形式,一种是以{A,B,C},一种是[{A},{B},{C}]。但是很多时候是这两种的结合。 首先导入jar包 如果是第一种只需要加入以下代码,注意

    2024年02月11日
    浏览(54)
  • Java json 格式化小工具兼容转义 json 串

    封装了一个格式化 json 小工具,支持标准的 json 格式 和 经过后端编程语言如 java 转义后的 字符串 json 格式的格式化输出,代码如下: 我们看下两种 json 数据: 注意第一种使用 JSON 工具处理时,并不能正常解析,需要先转义才行,注意: 在 IDEA中 测试时不能直接将上面的内

    2024年02月07日
    浏览(53)
  • Java中将json字符串导出为json文件【详细步骤】

    一、概述 请根据具体需求具体改动,此代码需要将前端的数据查询出来,然后进行json字符串的转化 .getCatalogId(id)方法是根据id查出来的内容然后再进行转换成json字符串 也可以直接传入json字符串进行测试 二、代码  三、使用postman进行测试 导出的文件在D盘temp文件夹下面 下面

    2024年02月06日
    浏览(41)
  • Java处理JSON

    Java处理json有很多种方法,在这里总结一下。 Spring MVC 默认采用Jackson解析Json,出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。 Jackson核心模块由三部分组成:jackson-core、jackson-annotations、jackson-databind。 由于jackson-databind 依赖 jackson-core 和 jackson-annotations,所以只显

    2023年04月11日
    浏览(39)
  • Java课题笔记~JSON

    3.1 概述 概念: JavaScript Object Notation 。JavaScript 对象表示法. 如下是 JavaScript 对象的定义格式: 接下来我们再看看 JSON 的格式: 通过上面 js 对象格式和 json 格式进行对比,发现两个格式特别像。 只不过 js 对象中的属性名可以使用引号(可以是单引号,也可以是双引号);而

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包