首页 > 解决方案 > 如何在不引用键的情况下转储类似 json 的字符串?

问题描述

而不是这个(来自json.dumps):

[
  {
    "created": 581937573,
    "text": "asdf"
  },
  {
    "created": 581937699,
    "text": "asdf"
  }
]

我想得到这个 [non-JSON] 输出:

[
  {
    created: 581937573,
    text: "asdf"
  },
  {
    created: 581937699,
    text: "asdf"
  }
]

如果json.dumps可以选择更改键的引号字符,我可以将其设置为占位符并稍后将其删除。不幸的是,它似乎没有这个选项......还有其他聪明的想法吗?

(不需要从这种格式加载,但如果也存在解决方案会很有趣)

标签: pythonjsonpython-3.x

解决方案


re.sub在某些假设下提供快速修复:

import re

data = [...]
json_data = json.dumps(data)

with open('file.txt', 'w') as f:
    f.write(re.sub(r'"(.*?)"(?=:)', r'\1', json_data))

file.txt

[
  {
    created: 581937573,
    text: "asdf"
  },
  {
    created: 581937699,
    text: "asdf"
  }
]

这些假设是

  1. 您的数据足够小,re.sub可以在合理的时间内运行
  2. 您的数据不包含本身包含可能与我在这里使用的模式匹配的内容的字符串值。

该模式有效地查找所有字典键并去掉引号。


推荐阅读