所以json就是这样的,
"stores": [
{
"amazon": []
},
{
"flipkart": {
"product_store": "Flipkart",
"product_store_logo": "http://images-api.datayuge.in/image/ZmxpcGthcnRfc3RvcmUucG5n.png",
"product_store_url": "https://price-api.datayuge.com/redirect?id=aHR0cHM6Ly9kbC5mbGlwa2FydC5jb20vZGwvbWktYTEtYmxhY2stNjQtZ2IvcC9pdG1leDl3eHh6M2FtamF0P3BpZD1NT0JFWDlXWFVTWlZZSEVUJmFmZmlkPWFydW5iYWJ1bA",
"product_price": "14999",
"product_offer": "",
"product_color": "",
"product_delivery": "3-4",
"product_delivery_cost": "0",
"is_emi": "1",
"is_cod": "1",
"return_time": "10 Days"
}
},
{
"snapdeal": []
}
]
因此像flipkart这样的非空对象是JsonObject,但所有其他空对象都是数组。所以我对如何删除它们感到困惑。
JSONArray store_array = product_details_json.getJSONObject("data").getJSONArray("stores");
for (int i = 0; i<store_array.length(); i++){
JSONObject store = store_array.getJSONObject(i);
if (!store.getJSONObject(store.keys().next()).has("product_store")){
store_array.remove(i);
}else {
Log.i("Size :",store_array.length()+"");
}
}
但那不起作用。我知道我这样做是错的。因为它有数组和对象所以我得到以下错误
Value [] at amazon of type org.json.JSONArray cannot be converted to JSONObject
需要帮助!
答案 0 :(得分:1)
我发现您的代码有两个问题:
"stores"
的JSON结构是异构的 - 有些元素有一个映射到数组的键,一些映射到一个对象。这就是您所看到的错误的直接原因。您可以修改您的JSON,以便所有键都可以防御地映射到对象或代码。i
,因此您跳过刚刚移入您刚删除的索引的条目。解决这个问题的最简单方法是以相反的顺序迭代store_array
。将这些全部放在一起(并假设您不会改变您的JSON结构),类似以下内容(未经测试)应该有效:
JSONArray store_array = product_details_json.getJSONObject("data").getJSONArray("stores");
for (int i = store_array.length() - 1; i >= 0; i--){
JSONObject store = store_array.getJSONObject(i);
Object storeData = store.get(store.keys().next());
boolean isValidStore = storeData instanceof JSONObject
&& ((JSONObject) storeData).has("product_store");
if (!isValidStore) {
store_array.remove(i);
}
}