如何解析JSON文件?

Jam*_*sev 9 java json

简单的情况 -

  1. 读一个json文件
  2. 发现所有键值对
  3. 比较键值对

我试过gson,来自json.org的软件包,但似乎无法与之相提并论.

有人可以在Java中提供一个关于如何获取文件的清晰样本,阅读它,最后使用json objec我可以从中获取键/值对.

考虑一下:

private void runThroughJson(JsonObject jsonObject) {
    for (final Entry<String, JsonElement> entry : jsonObject.entrySet()) {

        final String key = entry.getKey();
        final JsonElement value = entry.getValue();

        System.out.println(key + " - " + value);

        if (value.isJsonObject()) {
            runThroughJson(value.getAsJsonObject());
        } else {                
            int ix = value.getAsString().indexOf('[');
            int ig = value.getAsString().lastIndexOf(']');

            System.out.println(ix);
            System.out.println(ig);

            String a = value.getAsString().substring(ix, ig);
            JsonElement jsonElement = parser.parse(a);
            runThroughJson(jsonElement.getAsJsonObject());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,它似乎没问题,但是,我得到一个例外:

Exception in thread "main" java.lang.IllegalStateException
    at com.google.gson.JsonArray.getAsString(JsonArray.java:133)
    at com.cme.esg.bk.TryGson.runThroughJson(TryGson.java:46)
    at com.cme.esg.bk.TryGson.runThroughJson(TryGson.java:44)
    at com.cme.esg.bk.TryGson.goForIt(TryGson.java:32)
    at com.cme.esg.bk.TryGson.main(TryGson.java:16)
Run Code Online (Sandbox Code Playgroud)

你能告诉我我错过了吗?

Chr*_*her 11

使用Gson(假设您在{...}json文件的顶层有对象):

final JsonParser parser = new JsonParser();
final JsonElement jsonElement = parser.parse(new FileReader("/path/to/myfile"));
final JsonObject jsonObject = jsonElement.getAsJsonObject();

for (final Entry<String, JsonElement> entry : jsonObject.entrySet()) {
   final String key = entry.getKey();
   final JsonElement value = entry.getValue();
   ....
}
Run Code Online (Sandbox Code Playgroud)

回应你的评论:

你当然应该避免从字符串重新解析json.使用类似的东西:

... else if (value.isJsonArray()) {
   final JsonArray jsonArray = value.getAsJsonArray();
   if (jsonArray.size() == 1) {
      runThroughJson(jsonArray.get(0));
   } else {
        // perform some error handling, since
        // you expect it to have just one child!
   }

} 
Run Code Online (Sandbox Code Playgroud)