Java:以字节为单位快速获取生成的JSON的大小

时间:2018-02-02 16:32:20

标签: java json jackson jackson-databind

我在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);
        }
    }
}

0 个答案:

没有答案