深入了解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/zh-hk/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

發表回復

登錄後才能評論