0

我有一个 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;

}

}
4

1 回答 1

1

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

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

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

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

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

于 2013-05-31T18:30:22.573 回答