[英]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 轉換器
對於傑克遜 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.