2017-02-09 98 views
1

的,我有以下JSONJSON數組列表字符串

[{ 
    "rowId": "03 EUR10580000" 
}, { 
    "rowId": "03 EUR10900001" 
}, { 
    "rowId": "03 EUR1053RUD*" 
}, { 
    "rowId": "033331" 
}] 

,我想將其轉換爲字符串與ROWID的唯一值的列表,所以在這種情況下,像

"03 EUR10580000" 
"03 EUR10900001" 
"03 EUR1053RUD*" 
"033331" 

我用Gson fromJson做了它,但是作爲回報,我得到了LinkedTreeMap的列表,並且當我做了一個循環失敗。我想要一個簡單的字符串列表。

+1

什麼不成?你能向我們展示你用於迭代的代碼嗎?您可以輕鬆使用LinkedTreeMap的'values()'方法,該方法返回一個'Collection'。或者你可以迭代這些條目,將它們映射到值並收集它們(使用例如lamba)。 – Philipp

+0

請發佈您在Gson所做的代碼。對傑克遜來說,這非常簡單,我相信Gson也一定如此。 –

回答

3

那麼,你的字符串不是「字符串列表」的json。它包含對象列表。所以你可以做的是創建一個rowID作爲字符串屬性的類。

類數據

  • ROWID(類型字符串)

然後可以使用GSON解析此JSON字符串列出<數據>如使用here

或就得準備一個新的json解析器手動。

1

寫POJO類作爲

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class RootObject { 

    @SerializedName("rowId") 
    @Expose 
    private String rowId; 

    public String getRowId() { 
     return rowId; 
    } 

    public void setRowId(String rowId) { 
     this.rowId = rowId; 
    } 

} 

然後,只需創建List<RootObject>從POJO得到的值。

+0

這個問題說它已經在使用Gson –

+0

Sry ......沒看見......我已經做了編輯 – Akshay

2

如果你只是想解析你的字符串使用快速Gson,你可以簡單地創建的建設者和使用「默認」用來表示在Java中你JSONListMap實例。如果你想更安全的類型,或者你想在一個「更大」的項目中使用解析的實例,我會建議按照其他答案中的描述創建一個POJO。

final GsonBuilder gsonBuilder = new GsonBuilder(); 

// you may want to configure the builder 

final Gson gson = gsonBuilder.create(); 

/* 
* The following only works if you are sure that your JSON looks 
* as described, otherwise List<Object> may be better and a validation, 
* within the iteration. 
*/ 
@SuppressWarnings("unchecked") 
final List<Map<String, String>> list = gson.fromJson("[{ ... }]", List.class); 

final List<String> stringList = list.stream() 
      .map(m -> m.get("rowId")) 
      .collect(Collectors.toList()); 

System.out.println(stringList); 
+0

你可以在你的列表中使用一個'TypeToken',就像'final Type type = new TypeToken >(){}。getType();'以確保你的列表中有正確的對象, /或'builder.enableComplexMapKeySerialization()。create();' –

0

您有:

String str = "[{\"rowId\":\"03 EUR10580000\"},{\"rowId\":\"03 EUR10900001\"},{\"rowId\":\"03 EUR1053RUD*\"},{\"rowId\":\"033331\"}]" 

你可以做這樣的事情(不需要像GSON任何外部庫):如果字符串格式化JSON

str = str.replace("{\"rowId\":\"","").replace("\"}","").replace("[","").replace("]",""); 
List<String> rowIDs = str.split(","); 

,你可以也trim()各字符串在rowIDs

0

您需要解析json字符串爲JsonArray。然後遍歷JsonArray實例並將每個json元素添加到列表ls。 Follwoing代碼sinppet是解決方案:

List<String> ls = new ArrayList<String>(); 
    String json = "[{\"rowId\":\"03 EUR10580000\"},{\"rowId\":\"03 EUR10900001\"},{\"rowId\":\"03 EUR1053RUD*\"},{\"rowId\":\"033331\"}]"; 
    JsonArray ja = new JsonParser().parse(json).getAsJsonArray(); 

    for(int i = 0; i < ja.size(); i++) { 
     ls.add(ja.get(i).getAsJsonObject().get("rowId").toString()); 
    } 
    for(String rowId : ls) { 
     System.out.println(rowId); 
    } 
    /* output : 
    "03 EUR10580000" 
    "03 EUR10900001" 
    "03 EUR1053RUD*" 
    "033331" */