当前位置: 首页 > 知识库问答 >
问题:

解析一个巨大的json文件而不增加堆大小

范安歌
2023-03-14

我在解析一个巨大的json文件(200mb)时遇到问题。起初,我尝试使用JACKSON将json解析为一棵树。然而,我遇到了堆大小问题。出于某种原因,增加堆大小不是一个选项。

JSON格式:

{ 
    "a1":{ "b1":{"c1":"somevalue", "c2":"somevalue"}, ... },
    "a2":{ "b1":{"c1":"somevalue"},"c3":"somevalue"}, ... },
    ....
}

我想做的是产生像这样的弦

str1 = "{ "b1":{"c1":"somevalue", "c2":"somevalue"}, ... }"
str2 = "{ "b1":{"c3":"somevalue"},"c4":"somevalue"}, ... }"

有没有办法做到这一点而不出现堆问题?

在python中,有一种简单的方法可以做到这一点,而且没有堆问题(没有JVM)

data  = json.loads(xxx)
for key,val in data.iteritems():
    puts val

一些想法:我可能不需要使用杰克逊树方法,因为我只想要字符串。流媒体Jackson可能是一种选择,但我很难编写它,因为我们的json格式非常灵活。任何建议都将不胜感激!

谢谢

共有2个答案

宋稳
2023-03-14

最后,我使用流的方法。我从超文本传输协议打开一个流,每次读取固定数量的字节到缓冲区。在我确定我已经在缓冲区中建立了一个有效的字符串后,我发出字符串并截断缓冲区。这样我使用很少的内存。谢谢!

孙承弼
2023-03-14

使用基于对象的数据绑定更节省内存,所以如果可以定义Java类来匹配结构,这是一种更好的方法:更快,使用更少的内存。但有时在结构未知的情况下需要树模型。

流式API可以提供帮助,您还可以混合使用各种方法:迭代JSON标记,然后使用JsonParser。readValueAs(MyType.class)JsonParser。readValueAsTree()。这只允许在内存中为JSON输入的子集构建树或对象。

 类似资料:
  • 问题内容: 我正在尝试使用gson库(http://code.google.com/p/google-解析一些巨大的JSON文件(例如http://eu.battle.net/auction- data/258993a3c6b974ef3e6f22ea6f822720/auctions.json )JAVA中的gson / )。 我想知道解析这种大文件(约80k行)的最佳方法是什么,以及您是否知道

  • 问题内容: 我正在尝试将DMOZ内容/结构XML文件解析为MySQL,但是所有现有的脚本都已经很老了并且不能很好地工作。如何在PHP中打开大型(+ 1GB)XML文件进行解析? 问题答案: 只有两个php API真正适合处理大文件。第一个是旧的expatapi,第二个是较新的XMLreader函数。这些api读取连续流,而不是将整个树加载到内存中(这是simplexml和DOM所做的)。 例如,您

  • 问题内容: 我正在研究可访问API的cron脚本,可接收JSON文件(大量对象)并将其存储在本地。完成后,另一个脚本需要解析下载的JSON文件,并将每个对象插入MySQL数据库。 我目前正在使用和。这将尝试在尝试处理之前将整个文件读入内存。除了我的JSON文件通常在250MB-1GB +之间的事实之外,这将很好。我知道我可以增加我的PHP内存限制,但这在我看来似乎并不是最大的答案。我知道我可以运行

  • 我的问题是: > 如何使其与较大的文件一起工作? 有什么办法能让它快一点吗? 我的电脑有8GB的RAM,运行64位Windows 7,处理器是3.40GHz(不确定你需要什么信息)。

  • 为了在巨大的xml文件中执行XPATH查询,我阅读了许多喜欢VTD-xml的文章,因此我复制了这些文章中的代码: 但当我运行它时没有结果,所以这意味着XML文件没有映射到内存中。。。我的问题是如何在VTD-xml中强制映射xml文件?