【问题标题】:json string fiddlingjson字符串摆弄
【发布时间】:2013-01-29 21:29:37
【问题描述】:

我有一个 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% 以上

【问题讨论】:

  • 查看我的答案更新。使用 C 库来反序列化 JSON 比摆弄字符串要快得多。

标签: python json serialization


【解决方案1】:

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

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


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

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多