将JSON字符串数组转换为Python对象数组

3
我有一个JSON字符串数组,我需要将其转换为对象数组(即将JSON转换为相应的对象),而不使用for循环。
源代码:(输入数据)
data = ['[1,2,3]', '[4,5,6]', '[7,8,9]']

需要输出:
[[1,2,3], [4,5,6], [7,8,9]]

我已经使用了以下解决方案。
import json

data = ['[1,2,3]', '[4,5,6]', '[7,8,9]']
output = []
for item in data:
    output.append(json.loads(item))

目前我有大量的 JSON 字符串(约 10 万条记录),而且每个 JSON 字符串数组内部包含约 5 万条记录。在执行时,处理这些数据需要超过 3GB 的内存。
注意:隐式输出是一个二维数组 [][]。第一维度约为 10 万条记录,第二维度包含约 5 万条记录。总共有 100K * 50K 个项目。
在转换时,使用上述方法转换 JSON 需要更长的时间。请帮助我提供一种不需要 for 循环的 JSON 字符串转换方法。

去掉循环不会有明显的差别。 - Aran-Fey
请考虑使用multiprocessing - Waket Zheng
嗯... data 不是 JSON 格式吗? - oldboy
1
@Anthony: "JSON基于两种结构: 一组名称/值对(...) 有序值列表。在大多数语言中,这被实现为数组、向量、列表或序列。" - bruno desthuilliers
1
@Anthony,不将内容包装在对象中被认为是不好的做法(主要是因为在反序列化JSON数组时允许注入代码的JavaScript安全问题),但从技术上讲仍然是正确的 - 实际上,“json”模块确实接受JSON列表。 - bruno desthuilliers
显示剩余5条评论
2个回答

2

现在这个解决方案看起来有点奇怪,但是它确实可以在优化中对您有所帮助。将整个列表转换为str类型,然后使用str函数删除所有的'单引号,最后应用json loads函数,万岁!这对我非常有效。

data = ['[1,2,3]', '[4,5,6]', '[7,8,9]']
r = str(data).replace("'",'')

import json
data = json.loads(r)

现在,您的数据将变成一个不需要循环即可实现的列表。
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

0

使用ujson可以让你的代码更快

import time
import json
import ujson

a_list = list(range(5000))
data = [str(a_list)] * 10000

s = time.time()

output = []
for item in data:
    output.append(json.loads(item))

print("json : %s" % (time.time()-s))

s = time.time()

output = []
for item in data:
    output.append(ujson.loads(item))

print("ujson : %s" % (time.time()-s))

在我的电脑上...

json : 10.048374891281128
ujson : 6.533677577972412

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接