簡體   English   中英

嵌套到映射為動態密鑰的Jackson的JSON映射

[英]Nested JSON Mapping to Jackson where key is dynamic

我正在尋求將嵌套的JSON結構映射到Jackson中,其中該對象是動態ID的對象。

{ 
     "id1": {
          "prop": true
     },
     "id2": {
          "prop": true
     },
     "id3": {
          "prop": true
     }
 }

我目前有以下Jackson Jackson:

package com.uk.jacob.containerdroid;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;

import java.util.HashMap;
import java.util.Map;

public class Container {
    private Map<String, ContainerDetails> properties = new HashMap<>();

    public class ContainerDetails {
        private boolean prop;

        public boolean getProp() {
            return prop;
        }

        public void setProp(boolean prop) {
            this.prop = prop;
        }
    }

    @JsonAnySetter
    public void add(String key, ContainerDetails value) {
        properties.put(key, value);
    }

    @JsonAnyGetter
    public Map<String, ContainerDetails> getProperties() {
        return properties;
    }

    @Override
    public String toString() {
        return "Containers {" +
                    ", properties=" + properties.toString() +
                '}';
    }
}

適用於屬於靜態屬性但不適用於嵌套JSON的數據。

我收到錯誤:

12-23 22:32:41.628  14098-14098/? W/System.err﹕ at [Source: { "test": { "prop": true } }; line: 1, column: 13] (through reference chain: com.uk.jacob.containerdroid.models.Container["test"])

如何操縱以上內容以正確映射?

似乎您只想要Map<String, Foo> ,其中Foo被定義為

public class Foo {
    private boolean prop;

    // getter, setter omitted
}

完整的工作示例:

import java.io.IOException;
import java.util.Map;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Foo {
    private boolean prop;

    public boolean isProp() {
        return prop;
    }

    public void setProp(boolean prop) {
        this.prop = prop;
    }

    @Override
    public String toString() {
        return "Foo{" +
            "prop=" + prop +
            '}';
    }

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{ \n" +
            "     \"id1\": {\n" +
            "          \"prop\": true\n" +
            "     },\n" +
            "     \"id2\": {\n" +
            "          \"prop\": true\n" +
            "     },\n" +
            "     \"id3\": {\n" +
            "          \"prop\": true\n" +
            "     }\n" +
            " }";
        Map<String, Foo> map = mapper.readValue(json, new TypeReference<Map<String, Foo>>() {
        });

        System.out.println("map = " + map);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM