0

我有一个 JSON 序列化值的 python 字典。

我想添加到这些序列化字符串而不先做loads(...),然后再做dumps(...)- 所以我“摆弄”序列化值:

目前我有:

for key, value in my_dict.items():
    # creating JSON of additional data I want in the JSON string
    extra = dumps({ 'key1': 3, 'key2': 1 }, default=str)

    # cutting the last '}' from the end off 'value', the '{' and '}' from the
    # start and end of 'extra', and then concatting them together.
    my_dict[key] = '%s,%s' % (value[:-1], extra[1:])

我这样做是因为我认为dumpsandloads是一种浪费,但我目前的方法不是很 Pythonic。

有没有更好的方法?

注意:“额外”值与初始 JSON 值来自不同的来源,并且不能插入到原始数据被序列化的位置。

使用约 20 个 JSON blob 的字典时的时间差异:

  • 摆弄:0.0005 秒
  • json>py>json: 0.0025 秒

快 5 倍

和 20,000 一起玩:

  • 摆弄':0.333
  • json>py>json:0.813

快 60% 以上

200,000:

  • 摆弄':4.5
  • json>py>json:10.25

快 60% 以上

4

1 回答 1

4

Pythonic 的方法是解析 JSON 字符串,修改值然后序列化它。JSON解析速度非常快,比标准的 pickle/unpickle 函数快得多,并且可能不会减慢您的速度,除非您拥有大量数据(数万行)。不要陷入过早优化的陷阱。

在任何情况下,您都应该始终以一种漂亮的、Pythonic 和可读的方式编写您的应用程序,然后(如果需要!)稍后优化代码的慢速部分。


另一种优化方法是用 C 编写相关代码,或者使用 C 库进行 JSON 序列化。看看ultrajson或看看这个答案,它解释了标准库如何比您使用simplejson的模块快得多。json

于 2013-01-29T21:53:53.177 回答