使用keySet()从JSONObject中提取键

我正在尝试从JSON对象中提取密钥。 在这种情况下,JSON对象是通过对名为SkyRock的社交网站进行API调用获得的,如下所示:

{ "max_page": 2, "posts": { "3111623007": { "id_post": 3111623007, "media_align": "float_left", "tags": [], "nb_comments": 24 }, "3114564209": { "id_post": 3114564209, "media_align": "float_left", "tags": [], "nb_comments": 33 }, "3116902311": { "id_post": 3116902311, "media_align": "float_left", "tags": [], "nb_comments": 29 } } } 

我基本上想要将所有post_id值存储在ArrayList中。 为了做到这一点,我试图从JSON对象中提取密钥 ,并按如下方式执行此操作:

 JSONObject posts = (JSONObject) jo.get("posts"); ArrayList keys = (ArrayString) posts.keyset(); 

问题是我无法找到一个合适的变量类型,我可以在其中存储从keyset()方法获得的结果。

我试着寻找答案,但在大多数情况下, key()被用来提取密钥(由于某种原因我无法使用它,我想这可能是因为我使用的是org.json.simple,但是我不确定)。

任何人都可以帮我在这里找到问题的解决方案或任何替代方法来检索Key值?

谢谢。

javadoc说:

 public interface JsonObject extends JsonStructure, Map 

因此,JSONObject是一个Map,其键的类型为String ,其值为JSONValue类型。

Map.keySet()的javadoc说:

 Set keySet() Returns a Set view of the keys contained in this map 

因此, JSONObject.keySet()返回的是Set (这是非常合乎逻辑的,因为JSON对象的键是字符串)。 所以你要:

 Set keys = posts.keyset(); 

posts表示JSONObject Map ,其中keyString

 JSONObject mainObject = new JSONObject(jsonString); JSONObject posts = mainObject.getJSONObject("posts"); Map map = (Map)posts.getMap(); ArrayList list = new ArrayList(map.keySet()); System.out.println(list); 

输出:

 [3116902311, 3114564209, 3111623007] 

这对我有用

o是一个JSONObject – > import org.json.simple.JSONObject;

 Set s = o.keySet(); Iterator i = s.iterator(); do{ String k = i.next().toString(); System.out.println(k); }while(i.hasNext()); 

从json对象和数组中提取键的递归方法(如果重复,则会合并它们,因为方法返回Set,但不返回Array)

 public static Set getAllKeys(JSONObject json) { return getAllKeys(json, new HashSet<>()); } public static Set getAllKeys(JSONArray arr) { return getAllKeys(arr, new HashSet<>()); } private static Set getAllKeys(JSONArray arr, Set keys) { for (int i = 0; i < arr.length(); i++) { Object obj = arr.get(i); if (obj instanceof JSONObject) keys.addAll(getAllKeys(arr.getJSONObject(i))); if (obj instanceof JSONArray) keys.addAll(getAllKeys(arr.getJSONArray(i))); } return keys; } private static Set getAllKeys(JSONObject json, Set keys) { for (String key : json.keySet()) { Object obj = json.get(key); if (obj instanceof JSONObject) keys.addAll(getAllKeys(json.getJSONObject(key))); if (obj instanceof JSONArray) keys.addAll(getAllKeys(json.getJSONArray(key))); } keys.addAll(json.keySet()); return keys; }