如何创建json对象列表,其中所有键都是唯一的guid



我有一个需要映射的json响应,不幸的是,它没有要启动的键值配对。键都是单独的guid,值是数据列表。下面是一个如何格式化的例子。我正在想办法创建一个对象列表,比如:

哈希映射<名称,值>因此

字符串名称:"guid1";

字符串值:"json响应的其余部分";

或者类似的,只要我能在guid上搜索得到我需要的值。

下面是一个代码示例:

{
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx1": {
"values": {
"item1":"value1"
"item2":"value2"
"item3":"value3"
}
},
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx2": {
"values": {
"item1":"value1"
"item2":"value2"
"item3":"value3"
}
},
......more entries
}

我本来希望能得到下面这样的东西,但没有运气:

{
"guid":"xxxxxxxe-xxxx-xxxx-xxxx-xxxxxx1",
"values": {
"item1":"value1"
"item2":"value2"
"item3":"value3"
}
}

关于如何绘制此类数据,有什么建议吗?反过来,我需要获取价值观信息,并将其进一步映射。

编辑-更喜欢使用jackson,因为我已经在为代码的其他部分使用了。

编辑2-我做了以下操作,我得到了一种非常糟糕的处理方式,但我仍然希望有人能提供一个更简单的解决方案:


Map<String, Map<String, Map<String, String>>> attributes = new HashMap<String,Map<String, Map<String, String>>>();
attributes =new Gson().fromJson(jsonString, Map.class);
//and then...
Map valueString = attributes.get("xxxx-xxx-xxx);
Map nestMap= (Map) valueString.get("values");
String theInfoINeed = (String)nestMap.get("item1");

使用Jackson,您还可以将上述有效载荷取消序列化为Map<String, Map<String, Map<String, String>>>。在取消序列化过程之后,如果需要,您可以将其转换为POJO。看看下面的例子:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import lombok.ToString;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class JsonMapsApp {
public static void main(String[] args) throws IOException {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Map<String, Map<String, Object>> result = mapper.readValue(jsonFile, new TypeReference<Map<String, Map<String, Object>>>() {});
List<Item> items = result.entrySet().stream().map(e -> {
Item item = mapper.convertValue(e.getValue().get("values"), Item.class);
item.setGuid(e.getKey());
return item;
}).collect(Collectors.toList());
items.forEach(System.out::println);
}
}
@Data
@ToString
class Item {
private String guid;
private String item1;
private String item2;
private String item3;
}

以上代码打印:

Item(guid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx1, item1=value1, item2=value2, item3=value3)
Item(guid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx2, item1=value1, item2=value2, item3=value3)

最新更新