Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用keySet()从JSONObject提取键_Java_Json - Fatal编程技术网

Java 使用keySet()从JSONObject提取键

Java 使用keySet()从JSONObject提取键,java,json,Java,Json,我试图从JSON对象中提取密钥。在本例中,JSON对象是通过对名为SkyRock的社交网站进行API调用获得的,如下所示: { "max_page": 2, "posts": { "3111623007": { "id_post": 3111623007, "media_align": "float_left", "tags": [], "nb_comments": 24 }, "3114564209": {

我试图从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\u id值存储在一个ArrayList中。为此,我尝试从JSON对象中提取,如下所示:

JSONObject posts = (JSONObject) jo.get("posts");
ArrayList<String> keys = (ArrayString<String>) posts.keyset();
jsonobjectposts=(JSONObject)jo.get(“posts”);
ArrayList keys=(ArrayString)posts.keyset();
问题是我无法找到合适的变量类型来存储从keyset()方法获得的结果

我尝试搜索答案,但在大多数情况下,keys()用于提取密钥(由于某些原因无法使用,我认为可能是因为我使用org.json.simple,但不确定)

有人能在这里帮我找到问题的解决方案或检索键值的其他方法吗


谢谢。

posts代表
JSONObject
Map
,其中
键是
String

JSONObject mainObject = new JSONObject(jsonString);

JSONObject posts = mainObject.getJSONObject("posts");

Map<String, JSONObject> map = (Map<String,JSONObject>)posts.getMap();

ArrayList<String> list = new ArrayList<String>(map.keySet());

System.out.println(list);
说:

因此,
JSONObject.keySet()
返回的是一个
Set
(这是非常合乎逻辑的,因为JSON对象的键是字符串)

因此,您只需要:

Set<String> keys = posts.keySet();
Set keys=posts.keySet();

用于从json对象和数组中提取键的递归方法(在重复的情况下,将合并它们,因为方法返回Set,而不是Array)

publicstaticsetgetallkeys(jsonobjectjson){
返回getAllKeys(json,newHashSet());
}
公共静态设置getAllKeys(JSONArray arr){
返回getAllKeys(arr,newhashset());
}
私有静态设置getAllKeys(JSONArray arr,设置密钥){
对于(int i=0;i
这对我很有用

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());
Set s=o.keySet();
迭代器i=s.Iterator();
做{
字符串k=i.next().toString();
系统输出println(k);
}而(i.hasNext());
我的JSONObject是JSONObject; 迭代器listKEY=jsonObject.keys(); 做{ 字符串newKEY=listKEY.next().toString(); }while(listKEY.hasNext());
在这里,您可以创建json对象,然后使用JSONObject.keys()检索键,并获得迭代器。在这里,我们使用JSONObject.keys()作为动态键。如果您有静态键,则您知道键的名称,但如果您不知道键,则使用此方法

val mainObject=JSONObject(jsonString)
val posts=mainObject.getJSONObject(“posts”)
var list=ArrayList()
val map=posts.keys()
while(map.hasNext()){
var key=map.next().toString()
var jsonObject=posts.getJSONObject(键)
val gson=gson()
val kk:Objects=gson.fromJson(jsonObject.toString(),Objects::class.java)
列表。添加(kk)
Log.e(“key”,key)
}

为什么要将其强制转换为
地图
?这是一个
映射
@jbniset,因为
{“id_post”:311623007,“media_align”:“float_left”,“tags”:[],“nb_comments”:24}
表示
JSONObject
。我的示例运行良好,我得到了所有数据。您应该将JSONValue强制转换为JSONObject,而不是映射本身。但无论如何,这都无关紧要,因为OP需要的是键,而不是映射的值。好吧,我的第一个编译器不识别
JSONValue
。我不知道该把它带到哪里去。此外,我确信100%OP需要密钥才能提取数据,因为每个密钥都是唯一的:
我基本上想将所有post\u id值存储在一个ArrayList
@jbnitet中,我们得到
obj.getLong(“id\u post”)
其中
obj
JSONObject
但是,它给出了一些类型安全警告:/@拉希拉罗拉:我意识到我的答案链接到了一个类的javadoc,而你实际上并没有使用这个类。您的JSONObject来自哪个库?对不起,我忘了提到这个!我使用的是.is
javax.json.JsonStructure
Java7?OP询问的是JSONObject而不是JSONObject Hi,您能否添加一点关于您的答案的信息,这不会告诉任何事情。请回答并解释代码。
Set<K> keySet()

Returns a Set view of the keys contained in this map
Set<String> keys = posts.keySet();
public static Set<String> getAllKeys(JSONObject json) {
    return getAllKeys(json, new HashSet<>());
}

public static Set<String> getAllKeys(JSONArray arr) {
    return getAllKeys(arr, new HashSet<>());
}

private static Set<String> getAllKeys(JSONArray arr, Set<String> 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<String> getAllKeys(JSONObject json, Set<String> 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;
}
Set<?> s =  o.keySet();

    Iterator<?> i = s.iterator();
    do{
        String k = i.next().toString();
        System.out.println(k);

    }while(i.hasNext());
  Iterator <String> listKEY = jsonOject.keys();
                do {
              String newKEY = listKEY.next().toString();
                   
                }while (listKEY.hasNext());
    val mainObject = JSONObject(jsonString)
    val posts = mainObject.getJSONObject("posts")
    var list = ArrayList<Objects>()
    val map = posts.keys()
    while (map.hasNext()) {
        var key = map.next().toString()
        var jsonObject = posts.getJSONObject(key)
        val gson = Gson()
        val kk: Objects = gson.fromJson(jsonObject.toString(), Objects::class.java)
        list.add(kk)
        Log.e("key", key)
    }