如何使用java递归获取JSON的键?

时间:2015-05-13 08:03:07

标签: java json

我需要获取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数组,而产品包含empId,emp_name和emp_address,我需要获得employees.product1.empId,employees.product1.emp_name和employees.product1.emp_address,等等.. 请告诉我如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

您可以使用像GSon这样的库为您执行此操作。如果您创建一个包含所需字段的可序列化Product类,那么您只需要

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

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

答案 1 :(得分:0)

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);

            }
        }
    }
}