为了账号安全,请及时绑定邮箱和手机立即绑定

如何格式化json转储

如何格式化json转储

慕雪6442864 2022-04-27 13:11:54
我得到了这样的 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"}}}
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

这是一个 hack,它将所有内容转换为列表,然后将方括号更改为大括号。如果您的字符串可能包含方括号,那将是一个问题。


import json


inp = """

{

    "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 d



inp = items(inp)


print(json.dumps(inp, indent=2).replace("[", "{").replace("]", "}"))

输出:


{

  {

    "aaa",

    {

      {

        "bbb",

        {

          {

            "ccc",

            {

              {

                "ddd",

                "string1"

              },

              {

                "eee",

                "string2"

              }

            }

          }

        }

      },

      {

        "kkk",

        "string3"

      }

    }

  }

}


查看完整回答
反对 回复 2022-04-27
?
万千封印

TA贡献1891条经验 获得超3个赞

请注意,当字典键不是有序键时,您将它们视为有序,因此我使用列表使其更加明确。


如果是我,我一开始不会转储到 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


查看完整回答
反对 回复 2022-04-27
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号