簡體   English   中英

在 Java 中將 Map 轉換為 JSON

[英]Convert Map to JSON in Java

我正在從節點遷移到 java 並發現很難使用 JSON 我有以下 Map 結構:

{1=Terrain, 2=Tree, 3=Building}

我需要將其轉換為 JSON,但使用以下結構:

[{ id: 1, name: Terrain }, { id: 2, name: Tree }, { id: 3, name: Building }]

我怎樣才能做到這一點? 謝謝

Java 中的 map 與 Javascript 中的 this 對象相同:

var map = {};
map[1] = "Terrain";
map[2] = "Tree";

這將產生相同的 json。

現在要解決 Java 中的問題,您需要將地圖轉換為對象列表:

Map<Integer, String> originalMap = //your map with values

List<Structure> mappedList = originalMap.entrySet()
        .stream()
        .map(entry -> new Structure(entry.getKey(), entry.getValue()))
        .collect(Collectors.toList());
//convert mappedList via jackson

Structure 只是我創建的一個類,它與 json 中的屬性 id 和 name 匹配:

public class Structure {
    private int id;
    private String name;

    public Structure(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
}

多個 API 可用於 Map to JSON 轉換器

  1. 使用傑克遜 API
  2. 使用 Gson API
  3. 使用 org.json API

對於傑克遜 API

為此,您需要在項目中添加 jakson 依賴項

<dependencies>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-core</artifactId>
    <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>
</dependencies>

請查看以下主程序進行對話

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;

public class ConvertJavaMapToJson {

@Test
public void convertMapToJson() {
    Map<String, String> elements = new HashMap();
    elements.put("Key1", "Value1");
    elements.put("Key2", "Value2");
    elements.put("Key3", "Value3");

    ObjectMapper objectMapper = new ObjectMapper();

    try {
        String json = objectMapper.writeValueAsString(elements);
        System.out.println(json);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
  }
}

對於 Gson

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


import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.SortedMap;
import java.util.TreeMap;

public class ConvertJavaMapToJson {

@Test
public void convertMapToJson() {
    SortedMap<String, String> elements = new TreeMap();
    elements.put("Key1", "Value1");
    elements.put("Key2", "Value2");
    elements.put("Key3", "Value3");

    Gson gson = new Gson();
    Type gsonType = new TypeToken<HashMap>(){}.getType();
    String gsonString = gson.toJson(elements,gsonType);
    System.out.println(gsonString);
}
}

對於 org.json

<dependencies>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180813</version>
    </dependency>
</dependencies>


import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;

public class ConvertJavaMapToJson {

@Test
public void convertMapToJson() {
    Map<String, String> elements = new HashMap<>();
    elements.put("Key1", "Value1");
    elements.put("Key2", "Value2");
    elements.put("Key3", "Value3");

    JSONObject json = new JSONObject(elements);

    System.out.println(json);
}
}

假設您的地圖是Map<Integer,String> ,您可以定義以下類:

public class IdName {
    private final int id;
    private final String name;

    public IdName(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

然后,您需要將地圖轉換為IdName的集合:

        List<IdName> list = map.entrySet().stream()
                .map((e)->new IdName(e.getKey(),e.getValue()))
                .collect(Collectors.toList());

然后將該集合轉換為 JSON。 傑克遜的例子:

String json = mapper.writeValueAsString(list);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM