Java 如何从Json数组中删除空对象
json就是这样的Java 如何从Json数组中删除空对象,java,android,json,Java,Android,Json,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=aHR0cHM6Ly
"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()+"");
}
}
需要帮助 我发现您的代码有两个问题:
“stores”
的JSON结构是异构的-有些元素具有映射到数组的键,有些元素映射到对象。这是您看到的错误的直接原因。您可以修改JSON,使所有键都映射到一个对象,也可以防御性地映射代码i
,因此会跳过刚刚移动到刚删除的索引中的条目。处理这个问题最简单的方法是以相反的顺序迭代store\u array
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);
}
}
“但那不起作用。”——那是什么意思?它会崩溃吗?产生错误的结果?请提供您期望的和实际发生的详细信息。@TedHopp编辑时出现错误。。为什么要删除这些值?嗯,您有一个异构结构。键
“amazon”
和“snapdeal”
的值为空数组,而“flipkart”
的值为对象。您必须修改JSON使其具有同质性(例如,所有键都映射到对象),或者修改代码以处理每个键可能映射到数组或对象的可能性。尝试在recyclerview@DiegoveLopert中显示可用存储非常感谢您的回答。我被困在这个问题从2小时。从未在我的任何作品中使用过instanceOf(noob)。所以我从来没有想到过这件事。再次感谢你。。。。
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);
}
}