杰克逊反序列化JSON对象时出现OutOfMemoryError

时间:2019-06-07 20:49:29

标签: java json jackson

我有一个非常大的JSON文件的问题,该文件太大而无法将ObjectMapper.readValue()用作JsonNode。我想使用Out of memory error while parsing a large JSON using Jackson library on Android中的解决方案,除了JSON文件是一个字段名称事先未知的单个对象之外,因此我无法创建要反序列化的模型POJO。

对象内部的每个属性都具有相同的格式,我可以忽略那些内部对象的许多属性(我已经有一个POJO类可以对其建模)。如果JSON文件是数组而不是对象,则对我来说更容易解决此问题。 (我不是创建文件的人,只是从中读取文件。)

(我在下面发布我的解决方案,但我希望有更好的解决方案!)

1 个答案:

答案 0 :(得分:0)

由于无法将原始文件加载到ObjectMapper中,我决定解析JSON文件并将其重写为数组。逐行读写,我转换了一个看起来像这样的文件(但更大):

{
    "Unexpected Monkey" : {
        "name" : "UnexpectedMonkey",
        "age" : 7
    },
    "Another Unexpected Name" : {
        "name" : "Another Unexpected Name",
        "age" : 2
    }
}

进入:

[
    {
        "name" : "UnexpectedMonkey",
        "age" : 7
    },
    {
        "name" : "Another Unexpected Name",
        "age" : 2
    }
]

然后我可以解析文件How to parse a JSON string to an array using Jackson