HOWTO · Java

如何在 Java 中將 JSON 轉換為 Map

本文介紹瞭如何利用 Java 庫將 JSON 轉換為 Map。

我們將介紹如何在 Java 中將現有的 JSON 轉換為 Map。JSON 經常被用來結構化資料,但有時我們必須將 JSON 值轉換成其他資料型別,然後再對其進行處理。

Java 中建立了幾個庫來處理 JSON。我們將看到兩個最常用的 JSON 解析庫,它們允許我們進行許多 JSON 操作。

下面是我們將在本教程中工作的 JSON,以便更好地理解。

{
  "login" :
  {
    "userName" : "John Doe",
    "email" : "johndoe@john.com"
  }
}

Java 中 Jackson 庫將 JSON 轉化為 Map

我們必須在我們的專案中加入下面的依賴關係,這樣才能繼承 Jackson 庫的方法和類。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
    <scope>compile</scope>
</dependency>

新增依賴關係後,我們將首先使用 FileInputStream() 方法獲取本地 JSON 檔案。

我們需要呼叫 Jackson 庫中的 ObjectMapper().readValue() 來將我們的 JSON 轉換為 MapreadValue(JSON, ClassType) 函式需要兩個引數,即 JSON 和我們希望 JSON 被格式化的 ClassType。由於我們要將 JSON 轉換為 Map 格式,我們將使用 Hashmap.class 作為 ClassType

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;

public class Main {
  public static void main(String[] args) throws IOException {
    InputStream getLocalJsonFile = new FileInputStream("/sample.json");

    HashMap<String, Object> jsonMap = new ObjectMapper().readValue(getLocalJsonFile, HashMap.class);
    System.out.println(jsonMap);
  }
}

輸出:

{login={userName=John Doe, email=johndoe@john.com}}

Java 中 GSON 庫將 JSON 轉換為 Map

首先,我們必須包含我們專案的依賴性,以在我們的應用程式中包含所有的 GSON 方法和類。

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

GSON 是一個廣泛使用的 JSON 庫,我們將對其進行解析並轉換成 Java Map。

Gson().fromJson(json, type) 需要兩個引數,其中一個是 JSON 檔案,我們可以通過使用 new JsonReader(new FileReader(jsonFilePath)) 獲得,第二個引數是我們希望 JSON 的型別。我們將使用 TypeToken<> 來實現。

請看下面的例子。

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.Map;

public class Main {
  public static void main(String[] args) throws IOException {
    JsonReader getLocalJsonFile = new JsonReader(new FileReader("/sample.json"));

    Type mapTokenType = new TypeToken<Map<String, Map>>() {}.getType();

    Map<String, String[]> jsonMap = new Gson().fromJson(getLocalJsonFile, mapTokenType);

    System.out.println(jsonMap);
  }
}

輸出:

{login={userName=John Doe, email=johndoe@john.com}}