2 回答

TA貢獻1856條經驗 獲得超17個贊
假設
假設您的初始對象的類型Item如下所述。
class Item {
String fieldA,fieldB,fieldC;
// Getters / Setter
}
假設您的初始列表Item被稱為items
假設您的初始地圖被調用map并且是類型Map<String, Map<String,String>>
解決方案
向 Item 類添加一個方法以返回Map<String, String>對象的表示
public Map<String, String> toMap() {
return new HashMap<String, String>() {{
put("fieldA", fieldA);
put("fieldB", fieldB);
put("fieldC", fieldC);
}};
}
創建一個方法來獲取fieldD給定fieldA值的值
private String getFieldDValueForFieldAValue(String fieldAValue) {
return map.get(fieldAValue).get("fieldD");
}
創建一種方法以將正確的fieldD值添加到項映射
private Map<String, String> addFieldD(Map<String, String> itemMap) {
itemMap.put("fieldD", getFieldDValueForFieldAValue(itemMap.get("fieldA")));
return itemMap;
}
fieldD然后您可以為每個具有正確值的對象生成一個映射列表
List<Map<String, String>> list = items.stream()
.map(Item::toMap) // Converts all Items to Maps
.map(m -> addFieldD(m)) // Adds the correct fieldD value to each Map
.collect(Collectors.toList()); // make it a List
最后用它制作一個 JSON 字符串:
Type listType = new TypeToken<List<Map<String, String>>>() {}.getType();
Gson gson = new Gson();
String json = gson.toJson(list, listType);
System.out.println(json);
這將輸出以下 JSON:
[
{"fieldA":"lookupval1","fieldC":"val3","fieldB":"val2","fieldD":"xxx"},
{"fieldA":"lookupval1","fieldC":"val6","fieldB":"val5","fieldD":"xxx"},
{"fieldA":"lookupval2","fieldC":"val9","fieldB":"val8","fieldD":"yyy"}
]
添加回答
舉報