【问题标题】:How to retain double quotes while loading a json in python如何在python中加载json时保留双引号
【发布时间】:2016-11-15 06:57:56
【问题描述】:

使用 YAML 转储 JSON,

c= {"a":1} 
d = yaml.dump(c)

使用 YAML 加载 JSON

yaml.load(d) 
{'a': 1} # double quotes is lost

如何保证负载的输出有双引号?

注意:我也尝试过 json 和 simplejson,它们的行为方式都一样。

【问题讨论】:

  • 为什么需要双引号?据我所知,在 python 中,双引号和单引号没有区别。
  • YAML 和 JSON 是数据格式。引号不是数据的一部分。数据是“包含数字值 one 的字典,键值是一个字符串,a”。如果您想按原样保留 YAML/JSON,请不要解析它,只需将其视为字符串即可。
  • @Nurzhan 数据必须作为请求的响应返回,在客户端,单引号不被识别为 json。
  • 对于 Python,单引号和双引号没有区别。如果您必须将响应作为 JSON 字符串返回,则使用 json 模块 (json.dumps({'a': 1})) - 它将创建正确的 JSON 字符串 - 带有双引号。一些框架具有生成 JSON 响应的内置函数 - 它们在后台使用相同的 json 模块。

标签: json python-2.7 yaml


【解决方案1】:

对于 Python,单引号和双引号没有区别。

如果您需要 JSON 字符串形式的响应,请使用标准 json 模块 - 它会创建格式正确的 JSON 字符串 - 带有双引号。

>>> import json
>>> json.dumps({'a': 1})
'{"a": 1}'

一些框架或模块(如requests)具有内置函数 发送格式正确的 JSON(他们可能在后台使用标准的 json 模块)所以不必自己做。

【讨论】:

    【解决方案2】:

    这个

    c = {"a":1} 
    d = yaml.dump(c)
    

    不转储 JSON,它将 python dict 转储为 YAML。使用json.dumps()dict 创建一个JSON 字符串,然后可选地加载/转储为YAML,并通过在加载时指定preserver_quotes 来保留双引号:

    import sys
    import json
    import ruamel.yaml
    
    c= {"a":1}
    json_string = json.dumps(c)
    print(json_string)
    print('---------')
    
    data = ruamel.yaml.round_trip_load(json_string, preserve_quotes=True)
    data['a'] = 3
    ruamel.yaml.round_trip_dump(data, sys.stdout)
    

    将打印:

    {"a": 1}
    ---------
    {"a": 3}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-28
      • 2012-12-30
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2017-08-12
      • 2023-02-23
      相关资源
      最近更新 更多