如何处理一个 1.5G 的 json

2020-01-30 07:00:33 +08:00
 0bject

json 的数据结构是:

{
  "key1": {
    "key2": [
      { 200 多行各种结构}, 
      { 200 多行各种结构}, 
      { 200 多行各种结构},
      ...1.5G
    ]
  }
}

我想把数组全写进数据库, 服务器是前一阵 Oracle 1C1G 免费的...
在我的 15 年 8g mac 上尝试过 stream-json, 结果奔溃了
我想的最后的方法就是按行读, 可能也只能按行读了...

4773 次点击
所在节点    问与答
29 条回复
qiayue
2020-01-30 13:38:12 +08:00
hoyixi
2020-01-30 13:40:39 +08:00
流处理应该没问题,看看是不是库的参数没调对。

此外,JSONStream 也可以试试
0bject
2020-01-30 14:57:30 +08:00
@Mutoo 那可能是我没用对 我再去试试
@sinv 你是哪个司机。。。
@gabon 哈哈哈
@hammer86 这又一个司机?
@azh7138m 可能是我没用对 我再去试试
@qiayue 谢谢
@0o0O0o0O0o 谢谢
@Maboroshii 谢谢
@prenwang 谢谢
多谢各位 新名词太多了 我去用 stream-json 再试试 然后我来贴代码
20015jjw
2020-01-30 16:05:36 +08:00
新的 mac pro 1.5t 内存能派上用场了..?
(单位不一样
0bject
2020-01-30 16:47:31 +08:00
@azh7138m
@Mutoo
我把代码贴上了 谢谢
eason1874
2020-01-30 17:01:33 +08:00
按行读的前提是你的数据是按行存,现在显然不是。

像这种,我不知道有没有现成的轮子。如果让我处理的话,我会按块读取,比如每次读 1MB,正则提取出 JSON 格式字符串(剩下的放到下一块),然后解析。
0bject
2020-01-30 17:04:10 +08:00
@eason1874 有道理 如果我不能拿到 里面的一层 看来只能自己写了
Mutoo
2020-01-30 19:14:46 +08:00
@0bject 你的问题就是尝试去读整个数组,肯定会内存不足。以下 gist 这是我改的 demo 你可以参考一下。
https://gist.github.com/mutoo/28667cfe7e9806ae4cfca9f348997f03
0bject
2020-01-31 03:41:17 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/640924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX