json字符串摆弄

时间:2013-01-29 21:29:38

标签: python json serialization

我有一个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:])

我这样做是因为我认为dumpsloads是浪费,但我现在的方法并不是非常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%以上

1 个答案:

答案 0 :(得分:4)

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

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


另一种优化方法可能是用C编写相关代码,或者使用C库进行JSON序列化。请查看ultrajson或查看this answer,其中说明了标准库simplejson如何比您正在使用的json模块快得多。