在做解析服务器返回的城市数据时,服务器将各个城市的数据分类装入了各个字母的对象之下。比如
{ "ret": 0,
"msg": "success",
"data": {
"A": [
{
"city": "安庆市", // 市
"districts": "dddd", // 区/镇, 逗号分隔
"first": "A"
}
],
"D": [
{
"city": "东莞市",
"districts": "塘厦镇,凤岗镇",
"first": "D"
}
]
}
}
data 中返回了对象,而这个对象中有多少key 值是不确定的,
那么此时应当如何解析呢?
首先根据JSONObject。取出data
获取其中的所有 key值,根据
Iterator iterator = jsonObject.keys(); 这个方法
本想使用while 循环
while ( iterator.hasNext()){
String key = iterator.next();
JSONArray jsonArray = jsonObject.getJSONArray(key);
}
来取出其中的集合,但是不知道为什么,结果却是要么错位了,要么只迭代一次,或者死循环了。。。
于是采用了另外一种方式
将iterator 转换为集合
List key =new ArrayList<>();
key = Lists.newArrayList(iterator);( 采用了guava 中的转化方法,直接使用while循环,将可以往集合中装入,也只迭代一次。。。)
for (int i =0; i < key.size(); i++) {
List<实体类> l =new ArrayList<>();
Type type =new TypeToken>() {
}.getType();
l =new Gson().fromJson(jsonObject.getJSONArray(key.get(i)).toString(), type);
}
大功告成