java - 如何在解析 JSON 字符串时限制内存使用?

标签 java json org.json

调用时如何排除java.lang.OutOfMemoryError

new JSONObject(longAndMalformedJSONString)

我正在使用 JSON 解析器的 org.json 实现。

我并不是在寻找一种方法来解码错误的 JSON 字符串。我只是想对内存使用(可能还有 CPU 使用)设置一个上限,也许会得到一个可以恢复的异常。

或者,可以肯定地说,解析时的内存使用量与输入字符串长度相比永远不会超过一定比例吗?然后我就可以限制它。

或者是否有其他库可以提供该服务?

最佳答案

读取序列化数据(JSON、XML 等)有两种方法:您可以解析整个输入并将对象保留在内存中,或者通过提供的 API 导航流并仅保留您感兴趣的部分似乎 org.json 没有流 API,但有更复杂的库,如 Gson do :

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
List<Message> messages = new ArrayList<Message>();
reader.beginArray();
while (reader.hasNext()) {
  Message message = gson.fromJson(reader, Message.class);
  messages.add(message);
}
reader.endArray();
reader.close();

您还可以对输入进行限制,但这取决于您用于传输 JSON 负载的协议(protocol)

关于java - 如何在解析 JSON 字符串时限制内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33520502/

相关文章:

java - 从数组列表创建数组列表

java - 如何根据 json 中的天气 ID 进行切换来更改我的图片

json - 尝试从 Node.js 将文档插入 CouchDB 时出现 ' bad_request invalid_json' 错误

java - 如何从 json 发送 Java Long 值

javascript - 在 sequelize js 中获取关系的值(value)

android - 如何解析从 Android 应用程序中的 Geocoding API (V3) 收到的 Json 响应?

java - 从 Java 创建 JSON

java - 如何在 Java 中将 json 转换为 ArrayList 对象?

java - 当从jquery加载方法加载下拉列表时,如何从数据库中预选择下拉值

java - 如何以编程方式关闭 WAR/EAR