【问题标题】:How to recursively get the keys of JSON using java?如何使用java递归获取JSON的密钥?
【发布时间】:2015-05-13 08:03:07
【问题描述】:

我需要获取 JSON 的密钥。我怎样才能做到这一点?

例如,

{
"empId":"123",
"emp_name":"asda",
"emp_address":"skdjahskdga"
}

在上面的代码中,我需要获取empId、emp_name和emp_address。

假设是这样的数组,

{"products":[{
"empId":"123",
"emp_name":"asda",
"emp_address":"skdjahskdga"
},
{
"empId":"123",
"emp_name":"asda",
"emp_address":"skdjahskdga"
}]}

我需要获取 products.empId、products.emp_name、products.emp_address。

如果还有一层,假设employees数组包含products数组,而products包含empId、emp_name和emp_address,我需要获取employees.product1.empId、employees.product1.emp_name和employees.product1.emp_address,等等.. 请告诉我如何实现这一目标。

【问题讨论】:

标签: java json


【解决方案1】:

您可以使用像 GSon 这样的库来为您执行此操作。如果您使用所需的字段创建可序列化的 Product 类,那么您所要做的就是

json = {"products":[{
             "empId":"123",...

Product[] videoArray = gson.fromJson(json, Product[].class); 

【讨论】:

【解决方案2】:
static Set<String> finalListOfKeys = new LinkedHashSet<String>();

public static void main(String[] args) {
    JSONParser parser = new JSONParser();

    try {

        Object obj = parser.parse(new FileReader("Absolute Path of json file"));
        JSONObject jsonObject = (JSONObject) obj;
        Set<String> jsonKeys = jsonObject.keySet();
        for (String key : jsonKeys) {
            Object val = jsonObject.get(key);
            if (val instanceof JSONArray) {
                JSONArray array = (JSONArray) val;
                jsonArray(array, key);

            } else if (val instanceof JSONObject) {
                JSONObject jsonOb = (JSONObject) val;
                jsonObj(jsonOb, key);
            } else {
                finalListOfKeys.add(key);
                System.out.println("Key is : " + key);
            }
        }

        System.out.println("Final List : " + finalListOfKeys);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void jsonObj(JSONObject object, String key2) {
    Set<String> innerKeys = object.keySet();
    System.out.println("Inner Keys : " + innerKeys);
    for (String key : innerKeys) {
        System.out.println("Key : " + key);
        Object val = object.get(key);
        if (val instanceof JSONArray) {
            JSONArray array = (JSONArray) val;
            jsonArray(array, key2 + "->" + key);

        } else if (val instanceof JSONObject) {
            JSONObject jsonOb = (JSONObject) val;
            jsonObj(jsonOb, key2 + "->" + key);
        } else {
            finalListOfKeys.add(key2 + "->" + key);
            System.out.println("Key is : " + key2 + "->" + key);
        }
    }
}

public static void jsonArray(JSONArray array, String key) {
    if (array.size() == 0) {
        finalListOfKeys.add(key);
    } else {

        for (int i = 0; i < array.size(); i++) {
            Object jObject = array.get(i);
            if (jObject instanceof JSONObject) {
                JSONObject job = (JSONObject) jObject;
                System.out.println(job);
                jsonObj(job, key);

            }
        }
    }
}

【讨论】:

  • 你真的应该添加一些解释为什么这应该工作 - 你也可以添加代码以及代码本身中的 cmets - 在当前的形式中,它没有提供任何可以帮助的解释社区的其他人了解您为解决/回答问题所做的工作。这对于较早的问题和已经有答案的问题尤其重要。
  • 感谢您的反馈。代码非常不言自明,因此我避免使用任何 cmets。
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2018-03-10
  • 1970-01-01
  • 2018-11-29
  • 2018-01-16
相关资源
最近更新 更多