如何从Java中的JSONObject获取所有键/子键? [英] How to get all keys/sub keys from JSONObject in java?
本文介绍了如何从Java中的JSONObject获取所有键/子键?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的JSONObject:
This is my JSONObject :
{
"per_page": 3,
"total": 12,
"data": [{
"color": "#98B2D1",
"year": 2000,
"name": "cerulean",
"id": 1,
"pantone_value": "15-4020"
}, {
"color": "#C74375",
"year": 2001,
"name": "fuchsia rose",
"id": 2,
"pantone_value": "17-2031"
}
],
"page": 1,
"total_pages": 4
}
由此,我应该获得所有键,包括per_page
,total
,data
,color
,year
,pantone_value
,name
,page
和total_pages
From this i should get all the keys including per_page
,total
,data
,color
,year
,pantone_value
,name
,page
and total_pages
如果我使用JSONObject.names()或JSONObject.keySet().我只有最外面的钥匙
If i use JSONObject.names() or JSONObject.keySet() . I only get the outermost keys
推荐答案
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class MyClass
{
public static ArrayList<String> keylist = new ArrayList<String>();
public static void main(String args[]) throws JSONException
{
myfunction(myjson);
System.out.println(keylist);
}
public static void myfunction(JSONObject x) throws JSONException
{
JSONArray keys = x.names();
for(int i=0;i<keys.length();i++)
{
String current_key = keys.get(i).toString();
if( x.get(current_key).getClass().getName().equals("org.json.JSONObject"))
{
keylist.add(current_key);
myfunction((JSONObject) x.get(current_key));
}
else if( x.get(current_key).getClass().getName().equals("org.json.JSONArray"))
{
for(int j=0;j<((JSONArray) x.get(current_key)).length();j++)
{
if(((JSONArray) x.get(current_key)).get(j).getClass().getName().equals("org.json.JSONObject"))
{
keylist.add(current_key);
myfunction((JSONObject)((JSONArray) x.get(current_key)).get(j));
}
}
}
else
{
keylist.add(current_key);
}
}
}
}
可能性:
- 键":值"
- 键":{Object}
- 键":[Array]
逻辑:
- 如果仅包含值,则将密钥添加到列表中.
- 如果它是一个对象,我将存储密钥并将其值递归发送到同一函数.
- 如果它是一个数组,则检查它是否包含一个对象,如果是,则存储键并将该值递归发送到同一函数.
这篇关于如何从Java中的JSONObject获取所有键/子键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文