-1

問題は、次のような JSON 用の POJO を適切に構築する方法です。

{"1":{
       "value_1":"something",
       "value_2":"something else"},
 "2": {
       "value_1":"something",
       "value_2":"something else"},
 "3": {
       "value_1":"something",
       "value_2":"something else"},

  ...

 "999": {
         "value_1":"something",
         "value_2":"something else"}}

問題は、必要なデータを保持する配列に多くの異なる名前があるため、 Google Developers docsに示されているように JSON を解析できないことです。

4

2 に答える 2

1

このように解析してみてください(多くのコードをネタバレします)

public class ParseTo {

    private Map<String, InnerParse> unknown = new HashMap<>();

    @JsonAnyGetter
    public Map<String, InnerParse> get(){
        return unknown;
    }

    @JsonAnySetter
    public void set(String key, Object value){
        if(value instanceof Map){
            Map<String, String> m = (Map<String, String>) value;
            unknown.put(key, new InnerParse(m));
        }
    }
}

public class InnerParse {

    private static final String V1_PROPERTY = "value_1";
    private static final String V2_PROPERTY = "value_2";

    public InnerParse(Map<String, String> map){
        this.value1 = map.get(V1_PROPERTY);
        this.value2 = map.get(V2_PROPERTY);
    }

    private String value1;
    private String value2;

    public String getValue1() {
        return value1;
    }

    public void setValue1(String value1) {
        this.value1 = value1;
    }

    public String getValue2() {
        return value2;
    }

    public void setValue2(String value2) {
        this.value2 = value2;
    }
}

public class Main {

    public static void main(String[] args) {
        String jsonString = "{\"1\":{\n" +
            "       \"value_1\":\"something\",\n" +
            "       \"value_2\":\"something else\"},\n" +
            " \"2\": {\n" +
            "       \"value_1\":\"something\",\n" +
            "       \"value_2\":\"something else\"}" +
            "}";
        try {
            ParseTo parsed = new ObjectMapper().readValue(jsonString, ParseTo.class);

            parsed.get().entrySet().stream()
                .forEach(entry -> {
                    System.out.println("key: " + entry.getKey() + ", value: (" +
                        " Inner value1: " + entry.getValue().getValue1() + "," +
                        " Inner value2: " + entry.getValue().getValue2() +
                        ")");
                });

        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

依存関係:

com.fasterxml.jackson.core ジャクソン-コア

com.fasterxml.jackson.core ジャクソン注釈

com.fasterxml.jackson.core ジャクソン-データバインド

于 2016-04-23T10:33:54.400 に答える
0

Json を次のように調整することをお勧めします。

[{“id”: 1, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]},
{“id”: 2, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]},
{“id”: 3, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]},
…
{“id”: 999, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]}]
于 2016-04-23T09:35:37.830 に答える