无法正确地打印整个JSON数组与JSON库在Java [关闭]

vc9ivgsu  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(100)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我有一个未格式化的JSON字符串,我想使用Java格式化。我已经添加了org.json依赖项,并编写了以下代码:

String json = "[{...}, {...}]"; // Placeholder for my actual large JSON array string
JsonArray jsonArray = new JSONArray(json);
json = jsonArray.toString(4);

格式化后,JSON变得比它应该的小得多(最初约10 MB,格式化后约3 MB)。
为什么?很明显,很多数据都缺失了。
我也尝试了Gson,但失败了

Caused by: com.google.gson.JsonIOException: Failed making field 'java.io.Reader#lock' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type.
    at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:38)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:286)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
    at com.google.gson.Gson.getAdapter(Gson.java:556)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
    at com.google.gson.Gson.getAdapter(Gson.java:556)
    at com.google.gson.Gson.toJson(Gson.java:834)
    at com.google.gson.Gson.toJson(Gson.java:812)
    at com.google.gson.Gson.toJson(Gson.java:759)
    at com.google.gson.Gson.toJson(Gson.java:736)

因为我用的是Java 19。
使用代码:

Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonReader jsonReader = new JsonReader(new StringReader(json));
jsonReader.setLenient(true); // Enable lenient mode to handle malformed JSON
json = gson.toJson(jsonReader);

最后,我尝试了Jackson

ObjectMapper mapper = new ObjectMapper();
json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(mapper.readTree(json));

org.json相同的问题,输出的JSON大约是原始的1/3。

wsewodh2

wsewodh21#

我的错误最终是我以错误的方式将不同的JSON连接成一个大的JSON。"[{...}, {...}]" + "[{...}, {...}]" ...当然,这并没有正确工作,JSON解析在第一个数组之后停止。在修复了我的连接逻辑之后,即使是10MB的JSON也可以正确地解析和格式化。Jackson库。

相关问题