JSON 基本语法以及在Java 中的使用

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

一、JSON 概述

1.1 什么是 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交互格式。它去除了所有 JavaScript 执行代码,只保留 JavaScript 的对象格式。

它基于 ECMAScript (欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

1.2 JSON数据类型和语法

JSON适合表示层次结构,JSON采用键值对的方式来组织数据,仅支持以下几种数据类型:

  • 键值对:{"key": value}
  • 数组:[1, 2, 3]
  • 字符串:"abc"
  • 数值(整数和浮点数):12.34
  • 布尔值:truefalse
  • 空值:null

JSON的语法主要包含以下几点

  • JSON数据以键值对形式存在,键值对的键和值之间用冒号 : 连接。不同键值对之间用逗号 , 隔开,

  • JSON只允许使用双引号包裹 key, 特殊字符用 \ 转义,

  • {} 用于表示 JSON对象,也称为键值对(key-value pairs)的集合,对应 js 中的 object 。

  • [] 用于表示 JSON数组,也称为值的有序列表,对应 js 中的 array。数组中的元素可以是字符串、数字、布尔值、对象、数组或者 null

JSON格式的例子:

{
  "name": "John Doe",
  "age": 30,
  "city": "New York",
  "isStudent": false,
  "hobbies": ["reading", "traveling", "coding"],
  "address": {
    "street": "123 Main Street",
    "zipCode": "10001"
  }
}

1.3 JSON 优势

JSON(JavaScript Object Notation)作为一种数据交换格式,具有多个优点,使其在各种应用中得到广泛使用:

  • 轻量级: JSON 是一种轻量级的数据交换格式,相对于其他格式如 XML,它的数据量较小。这有助于减少网络传输的数据量,提高传输效率。

  • 易于解析和生成: JSON 数据易于在不同的编程语言中解析和生成。几乎所有的编程语言都提供了 JSON 解析器和生成器,使得在应用程序中处理 JSON 数据变得方便。

    js中,json与对象的转换:JSON.parse()/JSON.stringify();
    php中,json与数组的转换:json_encode()/json_decode();
    java中,json与对象的转换:fromJson()/toJson();
    python中,json与对象的转换:json.dumps()/json.loads();

  • 与多种平台和语言兼容: JSON 不依赖于任何特定的编程语言,可以在不同平台和各种编程语言之间进行数据交换。这使得 JSON 成为跨平台和跨语言的数据传输格式。

  • 浏览器原生支持: 在前端开发中,JSON 在 JavaScript 中具有原生支持,可以直接在浏览器中解析和生成 JSON 数据,使得前后端数据交互更加方便。

    // JSON string to JavaScript object:
    jsObj = JSON.parse(jsonStr);
    
    // JavaScript object to JSON string:
    jsonStr = JSON.stringify(jsObj);
    

二、使用 JSON

2.1 在 Java程序中使用 JSON

在 Java 中,我们通常使用一些库来处理 JSON 数据,实现 JavaBean和 JSON 之间的转换。这些库主要有:

  • Jackson
  • Gson
  • Fastjson

在 JavaBean和 JSON 之间的转换过程里,主要有两个概念:

  • 序列化: 将 JavaBean变为 JSON 对象
  • 反序列化: 将 JSON对象 解析为 JavaBean

具体地说,反序列化的过程包括以下步骤:

  1. 获取JSON数据: 从外部来源(例如网络、文件或其他应用程序)获取包含JSON数据的字符串。
  2. 反序列化操作: 使用相应的JSON解析库或框架,将JSON数据解析为 Java 对象。在Java中,常见的JSON解析库包括Jackson、Gson、org.JSON等。
  3. 生成Java对象: 解析后,将 JSON 数据映射到 Java对象的属性上,从而创建一个对应的 Java 对象。

在 Jackson 库中,将 JSON 数据映射到 Java 对象的属性是通过 Java 对象的 Getter 和 Setter 方法以及字段的匹配来完成的。以下是映射的基本规则:

  1. 属性名匹配: JSON中的字段名需要与 Java对象的属性名一致。例如,如果JSON中有一个字段名为 "id",则对应的Java对象需要有一个名为 id 的属性,并且Jackson库会通过调用 getId()setId() 方法来映射该属性。
  2. 驼峰命名规则: 如果JSON中的字段名采用驼峰命名(例如 "myField"),Jackson库会自动匹配到Java对象的驼峰命名风格的属性(例如 getMyField()setMyField() 方法)。
  3. 类型匹配: Jackson会尽量将JSON中的值转换为Java对象相应属性的类型。例如,如果JSON中的 "age" 字段是一个整数,Jackson会尝试将其转换为Java对象的 int 类型属性。
  4. 嵌套对象: 如果JSON中包含嵌套的对象,Jackson会递归地将这些嵌套对象映射到Java对象的嵌套属性中。
  5. 默认构造函数: Java对象需要具有默认构造函数(无参数的构造函数)。这是因为Jackson在映射时会创建Java对象的实例,然后通过Setter方法设置属性的值。

2.2 Jackson的使用

2.2.1 Jackson的简单介绍

Jackson 是一个用于 Java 平台的 JSON 处理库,主要用于 JSON 数据的序列化(将 Java 对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为 Java 对象)。 Jackson是一个广泛使用且功能强大的库, 可以与 Spring 框架无缝集成,是 Spring MVC 默认的 JSON 处理库

ObjectMapper 类是Jackson库的核心类,提供两种方法:

  • readValue 方法被用于将JSON字符串解析为 JavaBean 对象,可以接受不同类型的输入,包括 JSON 字符串、JSON 输入流等。例如

    ObjectMapper objectMapper = new ObjectMapper();
    String jsonString = "{ \"id\": 1, \"name\": \"John\" }";
    User user = objectMapper.readValue(jsonString, User.class);
    
  • writeValueAsString 方法用于将 Java 对象序列化为 JSON 数据字符串。该方法接受一个 Java 对象,并返回其对应的 JSON 字符串。例如:

    ObjectMapper objectMapper = new ObjectMapper();
    User user = new User(1, "John");
    String jsonString = objectMapper.writeValueAsString(user);
    

另外,我们还可以可以自定义JsonSerializerJsonDeserializer来定制序列化和反序列化

2.2.2 反序列化

假设有一个JSON字符串表示一个用户信息,如下所示:

{
  "id": 1,
  "username": "john_doe",
  "email": "john@example.com",
  "age": 30,
  "active": true
}

存在 User 类,如下所示:

@Data
public class User {
    private long id;
    private String username;
    private String email;
    private int age;
    private boolean active;

    // Default constructor (required for Jackson)
    public User() {}

    // Parameterized constructor
    public User(long id, String username, String email, int age, boolean active) {
        this.id = id;
        this.username = username;
        this.email = email;
        this.age = age;
        this.active = active;
    }

我们将使用 Jackson 库进行 JSON 解析。首先,确保已经将 Jackson 库添加到项目的依赖中。接下来,使用以下代码将 JSON 字符串解析为Java对象:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonExample {
    public static void main(String[] args) {
        // JSON字符串
        String jsonString = "{ \"id\": 1, \"username\": \"john_doe\", \"email\": \"john@example.com\", \"age\": 30, \"active\": true }";

        // 创建ObjectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            // 将JSON字符串解析为User对象
            User user = objectMapper.readValue(jsonString, User.class);

            // 使用解析得到的User对象
            System.out.println("ID: " + user.getId());
            System.out.println("Username: " + user.getUsername());
            System.out.println("Email: " + user.getEmail());
            System.out.println("Age: " + user.getAge());
            System.out.println("Active: " + user.isActive());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,User 类是一个简单的Java类,用于表示用户信息。ObjectMapper 类是Jackson库的核心类,它提供了方法来解析JSON字符串并将其转换为Java对象。这个例子中,readValue 方法被用于将JSON字符串解析为User对象。

请注意,User类应该具有与JSON属性相对应的Setter方法,以便ObjectMapper能够Java对象的实例,然后通过Setter方法设置属性的值

2.2.3 序列化

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonSerializationExample {
    public static void main(String[] args) {
        // 创建一个User对象
        User user = new User(1, "john_doe", "john@example.com", 30, true);

        // 创建ObjectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            // 将User对象转换为JSON字符串
            String jsonString = objectMapper.writeValueAsString(user);

            // 打印JSON字符串
            System.out.println("JSON String: " + jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们创建了一个User对象,然后使用ObjectMapperwriteValueAsString方法将其转换为JSON字符串。writeValueAsString方法将Java对象转换为JSON字符串,这样我们就可以在需要时将其传递给其他系统、写入文件或发送到网络。

请注意,User类应该具有与JSON属性相对应的Getter方法,以便ObjectMapper能够访问并获取Java对象的属性值

参考资料

GitHub - FasterXML/jackson: Main Portal page for the Jackson project

Jackson Tutorial | Baeldung(推荐)

使用JSON - 廖雪峰的官方网站 (liaoxuefeng.com)

什么是JSON - 知乎 (zhihu.com)文章来源地址https://www.toymoban.com/news/detail-816368.html

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

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

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

相关文章

  • Java后端开发——Ajax、jQuery和JSON

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

    2024年02月03日
    浏览(51)
  • java去除 json 中的 \n, \t, \r

    由于字符串中有出现了 换行符,导致转json失败,报错:json parse error。 一般来讲,直接用string的replace方法就可以了 此时还不行的话,可以用下边这个方式 \\\\s*代表匹配空白符,r、n代表换行符、回车,t 制表符 这两种方法能解决大部分的问题。如果还不行,可能就是反斜杠

    2024年02月16日
    浏览(43)
  • 如何使用Java处理JSON数据?

    在Java中,您可以使用许多库来处理JSON数据。以下是使用一种常见的库 Gson 的示例: 首先,确保您已经将 Gson 库添加到您的项目中。您可以在 Maven 中添加以下依赖项: 导入 Gson 类: 创建一个 Gson 实例: 将 JSON 字符串转换为 Java 对象,使用  fromJson()  方法: 上面代码中,将

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

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

    2024年01月23日
    浏览(64)
  • Java中的List<T>对象与Json格式的字符串的相互转换

    在这里我随便举一个例子 OK,以上就是互相转换的过程 我使用的场景是在订单的订单列表项这里,涉及到数据库相应字段数据的存放与提取,我的做法是,将List转换为Json格式字符串存入,取时再将Json格式转为List

    2024年02月15日
    浏览(68)
  • 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)
  • Maven简介及环境搭建和基本使用(Java开发中的实用工具)

    Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它 用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、 测试、打包和发布等工作。 pom.xml文件:里面可以配置相关信息,指导maven如何工作 坐标:jar包在仓库中的唯一位置, apache将

    2024年02月02日
    浏览(42)
  • Java:SpringBoot使用AES对JSON数据加密和解密

    客户端和服务端都可以加密和解密,使用base64进行网络传输 加密方 解密方 2.1、项目结构 2.2、常规业务代码 pom.xml Application.java WebMvcConfig.java CrossConfig.java JsonRequest.java JsonResult.java JsonResultVO.java IndexController.java UserController.java 2.3、加密的实现 application.yml SecretData.java DecryptRequ

    2024年02月11日
    浏览(58)
  • 前端使用JSON编辑器、java编辑器、浏览器中使用eslint

    一、vue3中使用Json 编辑器 二、react中使用(也可用在vue项目中)可用于java、js、json等 Monaco Editor 是一个浏览器端的代码编辑器,它是 VS Code 编辑器的核心部分,可以提供强大的代码编辑能力,它是 VSCode 的浏览器版本Monaco Editor 的特点包括: (1)支持多种编程语言 (2)支持

    2024年01月19日
    浏览(53)
  • Java后端使用POST请求向mysql中插入Json数据的问题

    Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property ‘urlParams’. It was either not specified and/or could not be found for the javaType (com.alibaba.fastjson.JSONObject) : jdbcType (null) combination.

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包