如何从Java中的JSONObject获取所有键/子键? [英] How to get all keys/sub keys from JSONObject in java?

查看:121
本文介绍了如何从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_pagetotaldatacoloryearpantone_valuenamepagetotal_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);
            }
        }
    }
}

可能性:

  1. 键":值"
  2. 键":{Object}
  3. 键":[Array]

逻辑:

  1. 如果仅包含值,则将密钥添加到列表中.
  2. 如果它是一个对象,我将存储密钥并将其值递归发送到同一函数.
  3. 如果它是一个数组,则检查它是否包含一个对象,如果是,则存储键并将该值递归发送到同一函数.

这篇关于如何从Java中的JSONObject获取所有键/子键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆