我在InputStream
中有一些JSON数据,我需要将其拆分为不超过5MB的部分,并单独上传部分。我有一个工作解决方案(下面)来执行此操作,但是当我遍历JSON节点时,获取生成的JSON的大小会花费更长时间。
我尝试获取每个节点的大小并将其添加到全局“total”变量(这非常快),但这并没有考虑将最终生成的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);
}
}
}