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}}