0

私はjacksonを使用してjsonオブジェクトと配列を正常に逆シリアル化してきましたが、今回は、次のオブジェクトの逆シリアル化にどのようにアプローチするかについて頭を悩ませることができません。Jackson またはその他の json 解析ライブラリを使用して、どのように逆シリアル化できますか。

 [
    {
        "name": "x",
        "elements": {
            "key1": {
                "name": "a",
                "type": "b"
            },
            "key2": {
                "name": "a",
                "type": "b"
            }
        }
    },
    {
        "name": "y",
        "elements": {
            "key3": {
                "name": "a",
                "type": "b"
            }
        }
    }
 ]

List<Test>Test が以下で定義されているリストに、 ?

public class Test {     
    public class Element {
        public String name;
        public String type;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
    }
    public String name;
    public Map<String, Element> elements;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Map<String, Element> getElements() {
        return elements;
    }
    public void setElements(Map<String, Element> elements) {
        this.elements = elements;
    }  
} 

最後に、私の逆シリアル化コード:

  public List<Test> test(final InputStream inputStream) {
    List<Test> test = null;
    try {
      test = mapper.readValue(inputStream, new TypeReference<List<Test>>() { });
    }  catch (final IOException e) {
      log.error("Unable to deserialize json",e);
    }
    return test;
  }

それが不可能な場合、実際に json をどのオブジェクトに逆シリアル化できますか? 前もって知ることができないことの 1 つは、キーの名前 (この例では key1、key2、key3) です。

4

1 に答える 1

2

次のようになります。

ObjectMapper mapper = new ObjectMapper();
List<Test> tests = mapper.readValue(jsonInput, new TypeReference<List<Test>>() { };

それをするでしょう。唯一のトリッキーな部分は、TypeReferenceジェネリック型情報を渡すために必要な です。他のライブラリも同様のアプローチを使用しています (GSONTypeTokenなど)。

于 2012-09-28T20:49:18.963 に答える