有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java将JSON转换为哈希映射

在这被标记为重复之前,请阅读问题(我确实看过类似的问题)。多谢各位

为简单起见,假设我有如下JSON:

{
   "clients" : [
   {
      "name" : "client 1",
      "id" : 1
   },
   {
      "name" : "client 2",
      "id" : 2
   }
],
   "other" : {
      "something" : ""
   }

   ...
}

因此,我只想创建一个客户端及其字段的哈希映射。基本的问题是,我将如何使用Jackson方法为单个JSON数组(如客户端)执行此操作?我曾尝试在线查看,但我看到的所有示例要么不使用Jackson,要么仅针对单个JSON对象,如下所示:

HashMap<String, String>[] values = new ObjectMapper().readValue(jsonString, new TypeReference<HashMap<String, String>[]>() {});

我也看过Gson示例,我知道我可以做一些字符串解析魔术:

jsonSting = jsonString.substring(jsonString.indexOf("["), (jsonString.indexOf("]")+1))

以我可以使用的格式获取它,但我想与Jackson一起尝试,以避免导入另一个库。有什么想法吗


重新表述问题: 如果我有一份这样的客户名单:

jsonString = [{"name" : "client 1","id" : 1},{"name" : "client 2","id" : 2}]

然后我可以做:

HashMap[] values = new ObjectMapper().readValue(jsonString, new TypeReference[]>() {});

为了得到我想要的。我基本上是在问是否有一种方法可以使用Jackson方法从上面的大JSON部分获取上面的jsonString。我知道我可以很容易地用字符串解析来完成这个例子,但是将来会有更复杂的情况,字符串解析并不是最好的实践


共 (1) 个答案

  1. # 1 楼答案

    您可以使用the Jackson tree model API提取JSON树的一部分,然后将其转换为映射数组

    以下是一个例子:

    public class JacksonReadPart {
        public static final String JSON = "{\n" +
                "   \"clients\" : [\n" +
                "   {\n" +
                "      \"name\" : \"client 1\",\n" +
                "      \"id\" : 1\n" +
                "   },\n" +
                "   {\n" +
                "      \"name\" : \"client 2\",\n" +
                "      \"id\" : 2\n" +
                "   }\n" +
                "],\n" +
                "   \"other\" : {\n" +
                "      \"something\" : \"\"\n" +
                "   }\n" +
                "\n" +
                "}";
    
        public static void main(String[] args) throws IOException {
            ObjectMapper mapper = new ObjectMapper();
            JsonNode node = mapper.readTree(JSON).path("clients");
    
            // non type safe
            Map<String, Object>[] clients = mapper.treeToValue(node, Map[].class);
            System.out.println(Arrays.toString(clients));
    
            // type safe
            JsonParser parser = mapper.treeAsTokens(node);
            clients = parser.readValueAs(new TypeReference<Map<String, Object>[]>() {});
            System.out.println(Arrays.toString(clients));
        }
    }
    

    输出:

    [{name=client 1, id=1}, {name=client 2, id=2}]
    [{name=client 1, id=1}, {name=client 2, id=2}]