【问题标题】:python json dumpspython json转储
【发布时间】:2013-03-07 13:26:03
【问题描述】:

我有以下字符串,需要把它变成一个不带u''的列表:

my_str = "[{u'name': u'squats', u'wrs': [[u'99', 8]], u'id': 2}]"

我可以通过使用来摆脱“

import ast
str_w_quotes = ast.literal_eval(my_str)

然后我做:

import json
json.dumps(str_w_quotes)

得到

[{\"id\": 2, \"name\": \"squats\", \"wrs\": [[\"55\", 9]]}]

有没有办法摆脱反斜杠?目标是:

[{"id": 2, "name": "squats", "wrs": [["55", 9]]}]

【问题讨论】:

  • json.dumps 为我返回 '[{"id": 2, "name": "squats", "wrs": [["99", 8]]}]'
  • 您确定您看到的是反斜杠,而不仅仅是转义引号?例如"\""'"' 相同。
  • u 只是表示它是 python
  • 你没有摆脱",你正在评估字符串并返回一个列表str_w_quotes 是一个糟糕的列表名称
  • 似乎您正在将my_str 传递给 json.dumps,否则 str_w_quotes 会像 JanneKarila 所说的那样在没有 us 的情况下出现。

标签: python


【解决方案1】:
>>> "[{\"id\": 2, \"name\": \"squats\", \"wrs\": [[\"55\", 9]]}]".replace('\\"',"\"")
'[{"id": 2, "name": "squats", "wrs": [["55", 9]]}]'

请注意,您可以只对原始字符串执行此操作

>>> "[{u'name': u'squats', u'wrs': [[u'99', 8]], u'id': 2}]".replace("u\'","\'")
"[{'name': 'squats', 'wrs': [['99', 8]], 'id': 2}]"

【讨论】:

    【解决方案2】:

    您不会将字符串转储为 JSON,而是将字符串加载为 JSON。

    import json
    json.loads(str_w_quotes)
    

    您的字符串已经是 JSON 格式。您不想再次将其转储为 JSON。

    【讨论】:

      【解决方案3】:

      这可行,但似乎不太优雅

      import json
      json.dumps(json.JSONDecoder().decode(str_w_quotes))
      

      【讨论】:

        【解决方案4】:

        json.dumps 认为 " 是字符串的一部分,而不是 json 格式的一部分。

        import json
        json.dumps(json.load(str_w_quotes))
        

        应该给你:

         [{"id": 2, "name": "squats", "wrs": [["55", 9]]}]
        

        【讨论】:

        • 应该是json.loads(json.dumps(str_w_quotes))
        • 当我尝试将 blob 数据发送到谷歌云平台数据存储区时,它可以工作:)
        猜你喜欢
        • 2013-06-25
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多