我有一些 JSON 数据,InputStream
我需要将其拆分为不大于 5MB 的部分并分别上传。我有一个可行的解决方案(如下)来执行此操作,但是当我遍历 JSON 节点时,获取生成的 JSON 的大小需要的时间越来越长。
我尝试获取每个节点的大小并将其添加到全局“总”变量(这非常快),但这并没有考虑将在最终生成的 JSON 中分隔所有节点的逗号。 想法:如果我这样做直到阈值,然后删除节点,直到最终生成的所有逗号的 JSON 都低于阈值,该怎么办?
我正在使用杰克逊罐子,不想只为这件小事使用其他任何东西。
这是输入数据的格式:
[
{ "nodeData": 1 },
{ "nodeData": 2 },
{ "nodeData": 3 }
]
这是我的工作 Java 代码:
ObjectMapper jsonMapper = ...
JsonNode tree = jsonMapper.readTree(inputStream);
List<JsonNode> nodeParts = new ArrayList<JsonNode>();
if (tree != null) {
for (Iterator<JsonNode> nodes = tree.elements(); nodes.hasNext();) {
JsonNode node = nodes.next();
nodeParts.add(node);
// this takes longer and longer as the nodeParts List grows
byte[] bytes = jsonMapper.writeValueAsBytes(nodeParts);
if (bytes.length > UPLOAD_SIZE_BYTES_THRESHOLD) {
bytes = null;
// remove the one we just added that put it over the threshold
nodeParts.remove(nodeParts.size() - 1);
// upload nodeParts
nodeParts.clear();
nodeParts.add(node);
}
}
}