簡體   English   中英

傑克遜json到對象解析

[英]jackson json to Object parsing

我有一個任務要將Json解析為Java類。

我試圖解析和有問題的Json片段就像樹結構。

這里的關鍵點是parameterValue可以是字符串,或者是參數名稱/值對的另一個數組;

我想用傑克遜映射器

Response response = mapper.readValue(jsonObjstring, Response.class);

這里的問題是我不知道如何在這里描述Response類,所以它可以由Jackson自動解析。 如果有可能的話。

JSON:

[{
  "parameterName" : "name",
  "parameterValue" : "value"
}, {
  "parameterName" : "apnRecord",
  "parameterValue" : [{
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }, {
     "parameterName" : "name",
     "parameterValue" : "value"
  }]
}]

你可以試試這個在線json到java pojo mapper,它產生了所需的結果,它對我來說很方便。

http://pojo.sodhanalibrary.com/

嘗試一下,如果你遇到任何困難提供你收到的完整的json,我們可以解決其他問題。

創建一個POJO Response.java類,其中包含您的字段,getter / setter,創建標准構造函數和包含字段的構造函數,以及toString方法()。 我給你看一個Annotations的例子

定義類如:

@JsonAutoDetect
@JsonSerialize
public class Response implements Serializable

然后你的領域

@JsonProperty
private String parameterName;

最后你的建設者喜歡這樣

@JsonCreator
public Response(@JsonProperty("parameterName") String parameterName) {
    this.parameterName = parameterName;
}

我把它定義為

private List<List<Object>> resultParameters;

然后jackson maper將它(Object)解析為LinkedHashMapEnty,當它是最終值時,或者解析為ArrayList - 如果它不是值而是另一個值列表;

它可以關閉;

package test;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    public static void main(String[] args) {

        String readJsonAsString = "[{\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n}, {\r\n  \"parameterName\" : \"apnRecord\",\r\n  \"parameterValue\" : [{\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }]\r\n}]";

        try {

            ObjectMapper mapper = new ObjectMapper();
            JsonNode jsonNodes = mapper.readTree(readJsonAsString.toString());
            for (JsonNode jsonNode : jsonNodes) {
                System.out.println(jsonNode.get("parameterName"));
            }


        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

首先需要將json轉換為字符串格式,然后通過ObjectMapper將其轉換為樹形結構。

為此你需要使用3個罐子:jackson-annotations-2.3.5.jar jackson-core-2.3.5.jar jackson-databind-2.3.5.jar

暫無
暫無

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

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