【问题标题】:Turn a python dict to a string with single backslash and double quotes将 python dict 转换为带有单反斜杠和双引号的字符串
【发布时间】:2020-07-15 23:44:05
【问题描述】:

我在python中有一个如下的dict

test_dict  = {'A': 'apple', 'B': 12345000, 'c': '2020-07-13 03:04:21.752566'}

我需要将 json 输出格式化如下,包括反斜杠和 cmets,int 值不需要反斜杠和 cmets

{
   "zz":"zz",
   "xx":"x",
   "rawData":"{\"A\":\"apple\",\"B\":12345000,\"c\":\"2020-07-13 03:04:21.752566\"}"

}

我已经实现了以下功能

def construct_raw(abc):
    start = "\"{"
    end = "}"
    delimiter = ","
    dict_len = len(abc)
    cnt = 0
    for k, v in abc.items():
        cnt = cnt + 1
        if type(v) is str:
            n = "\\\"" + v + "\\\""
        else:
            n = str(v)
        start = start + "\\\"" + k + "\\\"" + ":" + n
        if cnt != dict_len:
            start = start + delimiter

    start = start + end + "\""
    return start

这为 rawData 产生了以下输出

"{\\"A\\":\\"apple\\",\\"B\\":12345000,\\"c\\":\\"2020-07-13 03:04:21.752566\\"}"

但这会导致字符串中出现双反斜杠 如何解决这个问题?

【问题讨论】:

  • 为什么不json.dumps
  • 看起来像 JSON ......这是你需要的吗?
  • @juanpa.arrivillaga 原始数据是字符串而不是 json
  • @co2f2e 这到底是什么意思? JSON 是一种基于文本的序列化格式。您展示的是如何将有效的 JSON 字符串(表示该 JSON 对象)序列化为 JSON 字符串。我很确定你只需要print(json.dumps({'rawData':json.dumps(test_dict)}))
  • @juanpa.arrivillaga 问题已解决,谢谢

标签: python python-3.x regex string


【解决方案1】:

使用json.dumps(test_dict)

In [123]: a = {}

In [124]: a["zz"] = "zz"

In [125]: a["xx"] = "x"

In [126]: a["rawData"] = json.dumps(test_dict)

In [127]: with open("a.json","w") as f:
     ...:     json.dump(a,f)
     ...:

当您打开a.json 时,您会看到反斜杠

{"zz": "zz", "xx": "x", "rawData": "{\"A\": \"apple\", \"B\": 12345000, \"c\": \"2020-07-13 03:04:21.752566\"}"}

【讨论】:

    【解决方案2】:
    test_dict = {"A": "apple", "B": 12345000, "c": "2020-07-13 03:04:21.752566"}
    import json
    
    result = json.dumps(test_dict).replace('"', '\\"')
    

    输出:

    {\"A\": \"apple\", \"B\": 12345000, \"c\": \"2020-07-13 03:04:21.752566\"}
    

    【讨论】:

    • 这是函数得到 '{\\"A\\": \\"apple\\", \\"B\\": 12345000, \\"c\\" : \\"2020-07-13 03:04:21.752566\\"}'
    • 这是文件内容吗?
    • 不,这是 json 响应的一部分,但必须采用格式 "{\"A\": \"apple\", \"B\": 12345000, \"c\ ": \"2020-07-13 03:04:21.752566\"}
    【解决方案3】:

    试试这个:

    def construct_raw(abc):
        start = "\"{"
        end = "}"
        delimiter = ","
        dict_len = len(abc)
        cnt = 0
        for k, v in abc.items():
            cnt = cnt + 1
            if type(v) is str:
                n = "\"" + v + "\""
            else:
                n = str(v)
            start = start + "\"" + k + "\"" + ":" + n
            if cnt != dict_len:
                start = start + delimiter
    
        start = start + end + "\""
        return start
    

    或者这个:

    test_dict  = {'A': 'apple', 'B': 12345000, 'c': '2020-07-13 03:04:21.752566'}
    str_dict = '{'
    for k, v in test_dict.keys(), test_dict.values():
        if isinstance(k, str):
            str_dict += '\"k\"'
        elif isinstance(k, int):
            str_dict += 'k'
        str_dict += ":"
        if isinstance(v, str):
            str_dict += '\"v\"'
        elif isinstance(k, int):
            str_dict += 'v'
        str_dict += ','
    if str_dict != '{':
        str_dict = str_dict[:-1]
    str_dict += '}'
    

    【讨论】:

    • 需要反斜杠和双引号,但这不会产生它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多