我有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字符串(大约100K记录),而且每个JSON字符串数组内部包含大约50K的记录。在执行时,需要超过3GB的RAM进行处理。
注意:隐式输出为2-dim数组
[][]
。第一个维度是 大约100K记录第二维包含大约50K记录。完全 100K * 50K物品。
在转换时,转换JSON需要更多时间(对于上述方法)。请帮助我转换没有for循环的JSON字符串的想法。
答案 0 :(得分:0)
现在解决方案看起来很有线,但这样做有效,对您进行优化非常有用。将完整列表转换为str然后删除所有带有str函数的'
单个逗号并应用json加载,欢迎这对我有用。
data = ['[1,2,3]', '[4,5,6]', '[7,8,9]']
r = str(data).replace("'",'')
import json
data = json.loads(r)
现在您的data
将是列表列表而不会循环播放。你可以做到这一点。
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
答案 1 :(得分: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