从Python创建JSON的更有效方法

时间:2016-10-04 01:10:00

标签: python json rest

我想编写一个从磁盘上的CSV(带有x,y坐标)读取的API,并以JSON格式输出它们,以便由Web前端呈现。问题是有很多数据点(30k的顺序),所以从x和y的numpy数组进入JSON真的很慢。

这是我当前以JSON格式获取数据的函数。有什么方法可以加快速度吗?对于每个2d点来说,拥有如此大的数据结构似乎是多余的。

def to_json(xdata, ydata):
    data = []
    for x, y in zip(xdata, ydata):
        data.append({"x": x, "y": y})
    return data

2 个答案:

答案 0 :(得分:1)

你可以使用列表理解,如:

def to_json(xdata, ydata):
    return  [{"x": x, "y": y} for x, y in zip(xdata, ydata)]

消除使用unnessacary变量,更清洁。

您还可以使用以下生成器:

def to_json(xdata, ydata):
    return  ({"x": x, "y": y} for x, y in zip(xdata, ydata))

他们创造超级快速并且在系统上很轻,几乎没有记忆。 这是最后一次,直到你做一些事情,比如把它转换成一个列表。

由于对象只是x-y坐标,因此我使用带有x-y元组的生成器对象 - 它们也可以更快地创建 - 如下所示:

def to_json(xdata, ydata):
    return  ((x,y) for x, y in zip(xdata, ydata))

编辑:你可以用列表[]替换元组,它们是有效的JSON数组。

答案 1 :(得分:0)

你的方法似乎足够合理。以下是我可能会做出的一些改变。 itertools模块有许多方便的工具,可以让您的生活更轻松。我使用了izip,你可以在here

上阅读
import json
from itertools import izip

def to_json(xdata, ydata):
  data = []
  for x, y in izip(xdata, ydata): # using izip is more memory efficient
    data.append({"x": x, "y": y})
  return json.dumps(data) # convert that list into json