深入了解JSON结构

一、JSON结构体

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写。JSON结构体由两种类型的值构成:简单值和对象。

简单值可以是数字、布尔值、字符串、null。一个字符串是由双引号包裹的文本,由于JavaScript的字符串也使用双引号包裹,因此在JSON中需要将字符串转义。

对象是一个无序的键值对集合。一个对象由花括号包裹,每个键值对由冒号和逗号分隔。键必须是唯一的字符串,值可以是任意类型的JSON结构。

{
  "name": "Jack",
  "age": 26,
  "gender": "male",
  "address": { 
    "city": "New York",
    "state": "NY",
    "zip": 10001
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "555-1234"
    },
    {
      "type": "work",
      "number": "555-5678"
    }
  ]
}

二、JSON结构不同定义泛型

由于JSON结构体中的值可以是多样的类型,而Java中只支持强类型对象,因此需要使用泛型来进行定义。

我们可以使用com.fasterxml.jackson.databind包下的ObjectMapper来将JSON字符串转换为Java对象。为了避免使用时的类型转换,我们可以使用TypeReference类来对泛型进行定义。

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

// 定义一个泛型为Person的TypeReference
TypeReference<List<Person>> typeReference = new TypeReference<List<Person>>(){};

// 将JSON字符串转换为Java对象
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, typeReference);

三、JSON结构示例

以下是一些常见的JSON结构示例。

1、一个简单的键值对:

{
  "name": "John"
}

2、一个数组,包含多个简单值:

{
  "names": ["John", "Mike", "Lily"]
}

3、一个对象,包含多个键值对:

{
  "person": {
    "name": "John",
    "age": 26,
    "gender": "male"
  }
}

4、一个数组,包含多个对象:

{
  "persons": [
    {
      "name": "John",
      "age": 26,
      "gender": "male"
    },
    {
      "name": "Mike",
      "age": 28,
      "gender": "male"
    },
    {
      "name": "Lily",
      "age": 25,
      "gender": "female"
    }
  ]
}

四、JSON结构化数据

JSON结构化数据是将JSON结构按照特定的结构进行组织和分层,有助于提高JSON数据的可读性和可维护性。

一般可以使用缩进或者空格进行分层,也可以使用格式化工具来进行美化。

以下是一个按照分层进行美化后的JSON结构化数据。

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": false
}

五、JSON结构介绍

JSON结构的优点是简洁、易于阅读和编写,同时也是跨语言和平台的。

JSON结构的缺点是由于其灵活性,在复杂的情况下可能会变得冗长和难以理解。

对于大型的JSON数据,建议使用分层和美化的形式来组织和维护数据。

六、JSON结构比较工具

使用JSON结构比较工具可以方便地比较两个JSON结构之间的差异。

常用的工具有DiffTool、JsonCompare和JsonDiff。

以下是使用Jackson库中的JsonNode类来实现两个JSON结构比较的例子。

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode1 = objectMapper.readTree(jsonString1);
JsonNode jsonNode2 = objectMapper.readTree(jsonString2);

ObjectDiffNode diffResult = ObjectDifferBuilder.buildDefault().compare(jsonNode1, jsonNode2);
List<DiffNode> diffNodes = diffResult.getChildDiffs();

for(DiffNode diffNode : diffNodes) {
    System.out.println("path: " + diffNode.getPath() + ", "
                     + "left: " + diffNode.getLeft() + ","
                     + "right: " + diffNode.getRight());

}

七、JSON结构数据解析

解析JSON结构数据需要使用JSON解析工具。

Java中常用的JSON解析工具有JSON-lib、Jackson和Gson等。

以下是使用Jackson库中的ObjectMapper将JSON字符串解析为Java对象的例子。

ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(jsonString, Person.class);

八、JSON结构循环

在使用JSON结构循环时,我们需要先将JSON字符串转换为Java对象,然后就可以使用Java中的for循环来遍历JSON结构进行相关操作。

以下是一个例子,将一个含有多个person对象的JSON字符串循环输出。

ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});

for(Person person : persons) {
    System.out.println("name: " + person.getName() + ", "
                     + "age: " + person.getAge() + ","
                     + "gender: " + person.getGender());
}

九、JSON结构化入库

在使用JSON结构进行数据入库时,我们需要先将JSON字符串转换为Java对象,然后将Java对象入库。

以下是一个将含有多个person对象的JSON字符串入库的例子。

ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});

for(Person person : persons) {
    // 将person对象存入数据库
    ...
}

十、JSON结构的数据选取

在使用JSON结构进行数据选取时,我们需要先将JSON字符串转换为Java对象,然后根据需要的数据进行选取。

以下是一个将从含有多个person对象的JSON字符串中选取特定数据的例子。

ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});

for(Person person : persons) {
    if(person.getName().equals("John")) {
        System.out.println("John's age: " + person.getAge());
    }
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/200650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-05 20:01
下一篇 2024-12-05 20:01

相关推荐

  • Vue TS工程结构用法介绍

    在本篇文章中,我们将从多个方面对Vue TS工程结构进行详细的阐述,涵盖文件结构、路由配置、组件间通讯、状态管理等内容,并给出对应的代码示例。 一、文件结构 一个好的文件结构可以极…

    编程 2025-04-29
  • JSON的MD5

    在Web开发过程中,JSON(JavaScript Object Notation)是最常用的数据格式之一。MD5(Message-Digest Algorithm 5)是一种常用…

    编程 2025-04-29
  • Python程序的三种基本控制结构

    控制结构是编程语言中非常重要的一部分,它们指导着程序如何在不同的情况下执行相应的指令。Python作为一种高级编程语言,也拥有三种基本的控制结构:顺序结构、选择结构和循环结构。 一…

    编程 2025-04-29
  • 使用Java将JSON写入HDFS

    本篇文章将从以下几个方面详细阐述Java将JSON写入HDFS的方法: 一、HDFS简介 首先,先来了解一下Hadoop分布式文件系统(HDFS)。HDFS是一个可扩展性高的分布式…

    编程 2025-04-29
  • 如何使用Newtonsoft datatable转Json

    Newtonsoft DataTable 是一个基于.NET的JSON框架,也是一个用于序列化和反序列化JSON的强大工具。 在本文中,我们将学习如何使用Newtonsoft Da…

    编程 2025-04-28
  • JPRC – 轻松创建可读性强的 JSON API

    本文将介绍一个全新的 JSON API 框架 JPRC,通过该框架,您可以轻松创建可读性强的 JSON API,提高您的项目开发效率和代码可维护性。接下来将从以下几个方面对 JPR…

    编程 2025-04-27
  • Lidar避障与AI结构光避障哪个更好?

    简单回答:Lidar避障适用于需要高精度避障的场景,而AI结构光避障更适用于需要快速响应的场景。 一、Lidar避障 Lidar,即激光雷达,通过激光束扫描环境获取点云数据,从而实…

    编程 2025-04-27
  • Python存为JSON的方法及实例

    本文将从以下多个方面对Python存为JSON做详细的阐述。 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅…

    编程 2025-04-27
  • 使用Python获取JSON并解析

    本文将介绍如何使用Python获取JSON数据并解析相关内容。通过使用Python的第三方库,我们可以轻松地处理JSON数据,包括读取、提取和操作JSON数据。 一、获取JSON数…

    编程 2025-04-27
  • 使用Spread 8展示JSON数据

    使用Spread 8可以方便地展示JSON数据,本文将详细介绍如何利用Spread 8展示JSON数据。 一、Spread 8简介 Spread 8是一款强大的电子表格软件,可以方…

    编程 2025-04-27

发表回复

登录后才能评论