2017-02-09 60 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" */