我有一个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;
}
}
答案 0 :(得分:1)
有很多适用于Java的JSON库可以完全满足您的需求。其中一些备受推崇的是:
您可以在此处找到有关各种选项的更深入的讨论:https://stackoverflow.com/questions/338586/a-better-java-json-library
如果您真的对编写自己的解析器感兴趣,我将提供的提示是利用递归。假设您有一个类似这样的JSON对象:
{
prop1: (some value),
prop2: (some value),
...
}
请注意,当您开始解析顶级对象时,您执行的操作与解析每个值时的操作完全相同 - 因为值本身可能只是另一个JSON对象。因此,一个简单的入门方法是编写一个解析器,它只是将键及其相关值作为字符串获取,而不处理值。然后,再次对每个值调用相同的算法 - 依此类推,直到得到一个只是普通值的值 - 字符串,数字等。