猿问

如何格式化json转储

我得到了这样的 json 转储:


"aaa": {

    "bbb": {

        "ccc": {

            "ddd": "string1",

            "eee": "string2"

        }

    },

    "kkk": "string3"

}

我想以这种方式格式化它:将每个键值对(用 分隔:)括起来{},然后:用,.


我知道我可以re.sub()用来替换字符串模式,但是正则表达式不适用于重叠模式,所以我可以匹配,例如,"ddd": "string1"但不能"ccc": {...} 同时匹配。


对于上面的 json 字符串,我想得到:


{"aaa", {

    {"bbb", {

        {"ccc", {

            {"ddd", "string1"},

            {"eee", "string2"}

        }}

    }},

    {"kkk", "string3"}

}}


慕雪6442864
浏览 144回答 2
2回答

拉丁的传说

这是一个 hack,它将所有内容转换为列表,然后将方括号更改为大括号。如果您的字符串可能包含方括号,那将是一个问题。import jsoninp = """{    "aaa": {        "bbb": {            "ccc": {                "ddd": "string1",                "eee": "string2"            }        },        "kkk": "string3"    }}"""inp = json.loads(inp)def items(d):    if isinstance(d, dict):        return [(k, items(v)) for k, v in d.items()]    return dinp = items(inp)print(json.dumps(inp, indent=2).replace("[", "{").replace("]", "}"))输出:{  {    "aaa",    {      {        "bbb",        {          {            "ccc",            {              {                "ddd",                "string1"              },              {                "eee",                "string2"              }            }          }        }      },      {        "kkk",        "string3"      }    }  }}

万千封印

请注意,当字典键不是有序键时,您将它们视为有序,因此我使用列表使其更加明确。如果是我,我一开始不会转储到 JSON,而是将原生 python 数据结构直接序列化为 C++ 初始化器列表语法:myobj = {  "aaa": [    { "bbb": {        "ccc": [            {"ddd": "string1"},            {"eee": "string2"}        ]    }},    { "kkk": "string3" }  ]}def pyToCpp(value, key=None):  if key:    return '{{ "{}", {} }}'.format(key, pyToCpp(value))  if type(value) == dict:    for k, v in value.items():      return pyToCpp(v, k)  elif type(value) == list:    l = [pyToCpp(v) for v in value]    return '{{ {} }}'.format(", ".join(l))  else:    return '"{}"'.format(value)y = pyToCpp(myobj)print(y)输出:{ "aaa", { { "bbb", { "ccc", { { "ddd", "string1" }, { "eee", "string2" } } } }, { "kkk", "string3" } } }在这里运行它:https ://repl.it/repls/OddFrontUsers
随时随地看视频慕课网APP

相关分类

Python
我要回答