2015-05-02 17 views
2

我是一個java,json,放心的新手,並試圖工作和學習如何測試休息api。我有一個數組返回一個放心的迴應:反序列化json數組並提取值使用放心

Response response = given(getProjectInfoRequest).get(); 
response.asString(); 

{ 
    "options": [ 
     { 
      "text": "111", 
      "label": "ABC" 
     }, 
     { 
      "text": "222", 
      "label": "DEF" 
     }, 
     { 
      "text": "333", 
      "label": "GHI" 
     } 
    ] 
} 

,我想提取文本的價值標籤值「DEF」說,我可怎麼辦呢?

請注意我在下面迄今所做經歷了那麼多帖子看完後:

1. Options[] options = given(getProjectInfoRequest).when().get().as(Options[].class); 
this was giving me exception : 
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 

then I tried below: 
2. Options options = gson.fromJson(response.asString(), Options.getClass()); 
this at least resolved the above issue. 
    public class Options { 
    public String getLabel() { 
     return label 
    } 

    public void setLabel(String label) { 
     this.label = label 
    } 

    public String getValue() { 
     return value 
    } 

    public void setValue(String value) { 
     this.value = value 
    } 
    public String label; 
    public String value; 
} 

從這一點來說,我不知道我怎樣才能通過文字和值的數組迭代來提取我需要什麼,請你們能提供你的投入嗎?

請原諒我對這個基本問題的無知。 請也建議我一個很好的來源/方式來了解這一點。

在此先感謝!

回答

1

U can use Gson -這是一個Java庫,可用於將Java對象轉換爲其JSON表示形式。

JsonParser parser = new JsonParser(); 
JsonObject o = (JsonObject)parser.parse(response.asString()); 

for (Map.Entry<String,JsonElement> entry : o.entrySet()) { 
    JsonArray array = entry.getValue().getAsJsonArray(); 
    for (JsonElement elementJSON : array) { 
     [...] 
    } 
} 
+0

感謝您的快速響應。出於某種原因,我無法將RestAssured響應轉換爲JsonObject。我嘗試了下面的代碼: JsonParser jsonParser = new JsonParser(); JsonObject object = jsonParser.parse(response.asString())。getAsJsonObject();我試過 JsonElement element = new JsonPrimitive(response.asString()); JSONObject object = element.getAsJsonObject(); 他們兩個拋出異常: java.lang.IllegalStateException:不是一個JSON對象:[{「值」:」 ...... 任何建議 – Vikas

+0

我修改了代碼 –

+1

由於一噸的人,我是如此我昨天晚上/早上停留了一段時間:)我確實需要修改一下,但是之後它仍然有效,下面是我需要修改的部分: (Map.Entry entry:object.entrySet()) (JsonObject objJSON:array){...這裏有一些代碼} – Vikas