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

从java中的json字符串中提取值,java,json,Java,Json,我有一个json格式的字符串,我想从该json中提取某些值。 例如: {"foo":"this is foo", "bar":{"nested_bar": "this is nested bar"} } 用户可能希望打印foo或bar,或同时打印两者 现在,我有一个简单的类,它只能读取平面json 如何修改以下代码以合并嵌套的json 另一个问题是,用什么好的方法来表示我想要提取的标签,就像在平面json中一样?我正在传递一个数组 public class JsonParser { publ

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

{"foo":"this is foo", "bar":{"nested_bar": "this is nested bar"} }
用户可能希望打印
foo
bar
,或同时打印两者

现在,我有一个简单的类,它只能读取平面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;

}

}
公共类JsonParser{
公共静态字符串[]tagsToExtract;
公共JsonParser(字符串[]标记){
tagsToExtract=标签;
}
公共HashMap extractInformation(文本行)抛出JSONException{
HashMap outputHash=新建HashMap();
JSONObject jsn=新的JSONObject(line.toString());
for(int i=0;i
有相当多的Java JSON库可以完全满足您的需要。以下是一些更受推崇的观点:

  • 格森:
  • JSONLib:
您可以在此处找到对各种选项的更深入讨论:

但是,如果您真的有兴趣为它编写自己的解析器,我将给出的提示是利用递归。假设您有一个JSON对象,如下所示:

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

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

您是否考虑过使用JSON解析库,例如Jackson?是的,如果您访问JSON.org,它会列出大约12个Java JSON解析器。