如何使用动态密钥为数组名称创建Pojo类
问题描述:
我正在使用Rxandroid和翻新。我有这样的动态变化的阵列名称为自动每个阵列变化的JSON,如何使用动态密钥为数组名称创建Pojo类
{
"2016-10-02": [
{
"name": "foo",
"id": "1",
"category": "bar"
},
{
"name": "foo",
"id": "2",
"category": "bar"
},
{
"name": "foo",
"id": "3",
"category": "bar"
},
{
"name": "foo",
"id": "4",
"category": "bar"
}
],
"2016-10-01": [
{
"name": "foo",
"id": "5",
"category": "bar"
},
{
"name": "foo",
"id": "6",
"category": "bar"
},
],
"2016-10-03": [
{
"name": "foo",
"id": "5",
"category": "bar"
}
]
}
日期键名和的阵列变化的数量。在这个例子中有3个带日期键的数组。但是这些数组的数量各不相同。
我已经通过各种链接在*但无法解决问题。
答
使用JSONObject的键()拿到钥匙,然后你可以遍历每个键以获得动态值:
JSONObject object = new JSONObject("your response string")
Iterator keys = object.keys();
//Let's consider your POJO class is CategoryClass
// Let's take HashMap to store your POJO class for specific KEY
HashMap<String, ArrayList<CategoryClass>> mMap = new HashMap<String, ArrayList<CategoryClass>>();
while(keys.hasNext()) {
// here you will get dynamic keys
String dynamicKey = (String)keys.next();
// get the value of the dynamic key
JSONArray dynamicValue = object.getJSONArray(currentDynamicKey);
//Let's store into POJO Class and Prepare HashMap.
ArrayList<CategoryClass> mCategoryList = new ArrayList<CategoryClass>();
for(int i = 0 ; i < dynamicValue.length(); i++){
CategoryClass mCategory = new CategoryClass();
mCategory.setName(dynamicValue.getString("name"));
mCategory.setId(dynamicValue.getString("id"));
mCategory.setCategory(dynamicValue.getString("category"));
mCategoryList.add(mCategory);
}
//Add Into Hashmap
mMap.put(dynamicKey, mCategoryList);
}
答
从我的角度来看,这种格式是不recommended.The date
应该是值如"date":"2016-10-01"
而不是json key
。
+0
这不是真的回答这个问题,但它是一个该死的有效点!一个关键不应该是动态的 – WarrenFaith
你可以走两条路。实现你自己的反序列化器,或者告诉Retrofit你想让JsonObject(GSON库)作为响应,并从该对象中获取内部数组。 – toshkinl
检查[这个答案](http://*.com/questions/7304002/how-to-parse-a-dynamic-json-key-in-a-nested-json-result) –
@Suresh Basnet:检查下面回答完整的解析你的JSON响应 – Jai