2016-07-28 51 views
1

我有一個任務來解析Json到Java Class。jackson json to Object解析

Json片段我想解析和有問題是像樹結構。

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

我想用傑克遜映射

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

這裏的問題是,我不知道我怎麼能在這裏描述Response類,所以它可能是自動傑克遜解析。如果這甚至是可能的。

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" 
    }] 
}] 
+0

分享您的代碼段,而不是僅僅拋出'json' – Amolb

回答

2

你可以試試這個在線JSON到Java POJO映射器,它產生所需的結果,它派上用場了我很多次。

http://pojo.sodhanalibrary.com/

試試吧,如果你面對任何困難,更提供您收到完整的JSON,我們可以制定出一些別的東西。

1

創建一個包含字段和getters/setters的POJO Response.java類,創建一個標準構造函數和一個包含字段的toString方法()。我告訴你有註解的例子

定義類,如:

@JsonAutoDetect 
@JsonSerialize 
public class Response implements Serializable 

然後用

@JsonProperty 
private String parameterName; 

,最後你的構造F.E.您的領域這樣

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

,但是當值可能是字符串或數組時,這個pojo應該如何看起來像? –

+0

tomas,這parametername是一個字符串,如果你想像parameterValue更多的變量只是定義他們如圖所示,如果你問如何解析這些成arraylist,即時通訊這樣做 - > ArrayList images = jsonMapper.readValue( json,jsonMapper.getTypeFactory()。constructCollectionType(ArrayList。class,Image.class)); – kaya

0

我已經把它定義爲

private List<List<Object>> resultParameters;

然後傑克遜maper解析它(對象),以LinkedHashMapEnty當它是最後的值或ArrayList的 - 如果它不是一個值,但另一價值清單;

它可以關閉;

0
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瓶: 傑克遜的註解-2.3.5.jar 傑克遜核心2.3.5.jar 傑克遜 - 數據綁定-2.3.5.jar