Java 使用keySet()从JSONObject提取键
我试图从JSON对象中提取密钥。在本例中,JSON对象是通过对名为SkyRock的社交网站进行API调用获得的,如下所示: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": {
{
"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来自哪个库?对不起,我忘了提到这个!我使用的是.isjavax.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)
}