在Python中将JSON String数组转换为对象数组

时间:2018-06-11 06:00:47

标签: python arrays json python-3.x deserialization

我有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字符串的想法。

2 个答案:

答案 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