用Java提取JSON Keynames

时间:2015-01-16 22:21:14

标签: java json jackson

我想通过保留层次结构(父子关系)来提取JSON结构(仅限keyNames结构);我还不想要JSON的值。 我是Java的新手,并且一直在努力使用Jackson实现这一目标,但没有成功。

对此的任何指示都将非常感激。

2 个答案:

答案 0 :(得分:1)

我使用JSONObject(http://www.json.org/javadoc/org/json/JSONObject.html

为您创建了一个静态内部类
public static class KeyNode {
    private String name;
    private ArrayList<KeyNode> children;

    public KeyNode(String name) {
        this.name = name;
        this.children = new ArrayList<KeyNode>();
    }

    public void addChild(KeyNode child) {
        this.children.add(child);
    }

    public static void parseJsonToKeys(KeyNode node, JSONObject json) throws JSONException {
        Iterator<?> keys = json.keys();
        while (keys.hasNext()) {
            String name = (String) keys.next();
            KeyNode child = new KeyNode(name);
            node.addChild(child);
            if (json.optJSONObject(name) != null) {
                parseJsonToKeys(child, json.getJSONObject(name));
            } else if (json.optJSONArray(name) != null) {
                JSONArray array = json.getJSONArray(name);
                for (int i = 0; i < array.length(); i++) {
                    try {
                        array.getJSONObject(i);
                        parseJsonToKeys(child, json.getJSONObject(name));
                    } catch (JSONException e) {
                        // this is ok
                    }
                }
            }
        }
    }

    public static void exampleCodeUsage() {
        try {
            JSONObject json = new JSONObject("your json");
            KeyNode keyHierarchy = new KeyNode("root");
            parseJsonToKeys(keyHierarchy, json);
        } catch (JSONException e) {
            // your json is not formatted correctly
        }
    }
}

答案 1 :(得分:0)

JSONParser parser = parser;
Object obj = parser.parse(new FileReader(FileName.Json));
JSONObject jobj = (JSONObject) obj;

obj.keys()

该方法将为您提供JSONObject

中所有键的列表