从java中的json字符串中提取值

时间:2013-05-31 18:18:10

标签: java json

我有一个json格式的字符串,我想从那个json中提取某些值。 例如:

{"foo":"this is foo", "bar":{"nested_bar": "this is nested bar"} }

用户可能希望打印foobar或两者。

现在,我有一个简单的类,它只能读取扁平的json。

如何修改以下代码以合并嵌套的json?

另一个问题是,在平面json中表示我想要提取的标签的好方法是什么?我正在传递数组。

public class JsonParser {

public static String[] tagsToExtract;



public JsonParser(String[] tags){
    tagsToExtract = tags;
}


public HashMap<String, Object> extractInformation(Text line) throws JSONException{
    HashMap<String, Object> outputHash = new HashMap<String, Object>();
    JSONObject jsn = new JSONObject(line.toString());
    for (int i =0; i < tagsToExtract.length; i++){
        outputHash.put(tagsToExtract[i],jsn.get(tagsToExtract[i].toString()));
    }
    return outputHash;

}

}

1 个答案:

答案 0 :(得分:1)

有很多适用于Java的JSON库可以完全满足您的需求。其中一些备受推崇的是:

您可以在此处找到有关各种选项的更深入的讨论:https://stackoverflow.com/questions/338586/a-better-java-json-library

如果您真的对编写自己的解析器感兴趣,我将提供的提示是利用递归。假设您有一个类似这样的JSON对象:

{
    prop1: (some value),
    prop2: (some value),
    ...
}

请注意,当您开始解析顶级对象时,您执行的操作与解析每个值时的操作完全相同 - 因为值本身可能只是另一个JSON对象。因此,一个简单的入门方法是编写一个解析器,它只是将键及其相关值作为字符串获取,而不处理值。然后,再次对每个值调用相同的算法 - 依此类推,直到得到一个只是普通值的值 - 字符串,数字等。