json 如何保存每行多级字典?

fslejnso  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(150)

我有这个法令

dd = {
    "A": {"a": {"1": "b", "2": "f"}, "z": ["z", "q"]},
    "B": {"b": {"1": "c", "2": "g"}, "z": ["x", "p"]},
    "C": {"c": {"1": "d", "2": "h"}, "z": ["y", "o"]},
     }

我想把它格式化成这样的一行放在我用的文件里

with open('file.json', 'w') as file: json.dump(dd, file, indent=1)
# result
{
 "A": {
  "a": {
   "1": "b",
   "2": "f"
  },
  "z": [
   "z",
   "q"
  ]
 },
 "B": {
  "b": {
   "1": "c",
   "2": "g"
  },
  "z": [
   "x",
   "p"
  ]
 },
 "C": {
  "c": {
   "1": "d",
   "2": "h"
  },
  "z": [
   "y",
   "o"
  ]
 }
}

我也试过了,但是给我的字符串和列表是错误的

with open('file.json', 'w') as file: file.write('{\n' +',\n'.join(json.dumps(f"{i}: {dd[i]}") for i in dd) +'\n}')
# result
{
"A: {'a': {'1': 'b', '2': 'f'}, 'z': ['z', 'q']}",
"B: {'b': {'1': 'c', '2': 'g'}, 'z': ['x', 'p']}",
"C: {'c': {'1': 'd', '2': 'h'}, 'z': ['y', 'o']}"
}

我想要结果是

{
    "A": {"a": {"1": "b", "2": "f"}, "z": ["z", "q"]},
    "B": {"b": {"1": "c", "2": "g"}, "z": ["x", "p"]},
    "C": {"c": {"1": "d", "2": "h"}, "z": ["y", "o"]},
     }

我如何打印的json内容一行每dict而所有内部是一行呢?
我计划使用json.load读取它

j8ag8udp

j8ag8udp1#

Stdlib json模块并不真正支持这个功能,但是你应该可以写一个函数来做类似的事情,比如:

import json

def my_dumps(dd):
    lines = []
    for k, v in dd.items():
        lines.append(json.dumps({k: v})[1:-1])
    return "{\n" + ",\n".join(lines) + "\n}"

如果你只是想把json Package 成更人性化的行宽,而不是像使用indent选项那样把所有东西都隔开,那么另一个选项可能是使用textwrap

>>> print("\n".join(textwrap.wrap(json.dumps(dd), 51)))
{"A": {"a": {"1": "b", "2": "f"}, "z": ["z", "q"]},
"B": {"b": {"1": "c", "2": "g"}, "z": ["x", "p"]},
"C": {"c": {"1": "d", "2": "h"}, "z": ["y", "o"]}}
puruo6ea

puruo6ea2#

x = ['{\n']
for i in dd :
    x.append('"'+i+'": '+str(dd[i]).replace("'",'"')+",\n")       
x[-1] = x[-1][:-2]
x.append("\n}")
with open('file.json', 'w') as file: 
    file.writelines(x)

输出图像:-

相关问题