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

Java 如何创建所有键都是唯一guid的json对象列表,java,json,jackson,Java,Json,Jackson,我需要映射一个json响应,不幸的是,它没有一个键值配对来启动。键都是单独的guid,值是数据列表。下面是一个如何格式化的示例。我正试图找到一种创建对象列表的方法,例如: HashMap以便 字符串名称:“guid1” 字符串值:“json响应的其余部分” 或者类似的,只要我可以搜索guid以获得所需的值 下面是一个代码示例: { "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx1": { "values": { "item1&q

我需要映射一个json响应,不幸的是,它没有一个键值配对来启动。键都是单独的guid,值是数据列表。下面是一个如何格式化的示例。我正试图找到一种创建对象列表的方法,例如:

HashMap以便

字符串名称:“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获得如下内容,但运气不佳:

{
"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");



Map attributes=newhashmap();
attributes=new Gson().fromJson(jsonString,Map.class);
//然后。。。
Map valueString=attributes.get(“xxxx-xxx-xxx”);
Map nestMap=(Map)valueString.get(“值”);
String theinfo=(String)nestMap.get(“item1”);

使用
Jackson
还可以将上述有效负载反序列化为
Map
。反序列化过程完成后,如果需要,可以将其转换为
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;
}

您可以迭代
map.entrySet()
。或者创建自定义类型适配器。(此外,我还开发了Lychee数据绑定库,其中包含令牌流转换的概念。示例:)
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)