我正在尝试从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<String> keys = (ArrayString<String>) posts.keyset();
问题在于我无法找到合适的变量类型,我可以在其中存储从 keyset()方法获得的结果。
我尝试搜索答案,但在大多数情况下,键()正用于提取密钥(由于某种原因无法使用,我认为这可能是因为我正在使用org.json.simple,但我不确定。)
有人可以帮我在这里找到问题的解决方案或任何替代方法来检索Key值吗?
感谢。
答案 0 :(得分:13)
public interface JsonObject
extends JsonStructure, Map<String,JsonValue>
因此,JSONObject是一个Map,其键的类型为String
,其值的类型为JSONValue
。
javadoc of Map<K, V>.keySet()
说:
Set<K> keySet()
Returns a Set view of the keys contained in this map
那么,JSONObject.keySet()
返回的是Set<String>
(这是非常合乎逻辑的,因为JSON对象的键是字符串)。
所以你想要的只是:
Set<String> keys = posts.keySet();
答案 1 :(得分:5)
posts
代表Map
的{{1}},其中JSONObject
为key
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);
答案 2 :(得分:4)
这对我有用
o是JSONObject - &gt; 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());
答案 3 :(得分:0)
从json对象和数组中提取键的递归方法(如果重复,则会合并它们,因为方法返回Set,但不返回Array)
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;
}
答案 4 :(得分:-1)
Iterator <String> listKEY = jsonOject.keys();
do {
String newKEY = listKEY.next().toString();
}while (listKEY.hasNext());
答案 5 :(得分:-1)
在这里,您可以创建 json 对象,然后使用 jsonOject.keys() 检索密钥,您将获得此处的迭代器,如果您有静态密钥,则我们使用 jsonOject.keys() 作为动态密钥,那么您就知道密钥的名称,但如果您不知道不知道key然后用这个方法
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)
}