Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中打印嵌套的json输出_Python_Json - Fatal编程技术网

在python中打印嵌套的json输出

在python中打印嵌套的json输出,python,json,Python,Json,我有一个json文件,格式如下 { "project1": { "alias1": { "command":"somecommand for alias1" } }, "project2": { "alias2": { "command":"somecommand for alias2" }, "alias3": { "command":"somecommand for alias3" } } { 'al

我有一个json文件,格式如下

{
"project1": {
    "alias1": {
      "command":"somecommand for alias1"
    }
  },
"project2": {
    "alias2": {
      "command":"somecommand for alias2"
    },
    "alias3": {
      "command":"somecommand for alias3"
    }
 }
{
'alias1':'command', # Command for alias1
'alias2':'command', # Command for alias2
'alias3':'command'  # Command for alias3
}
我想提取数据并以以下格式将输出打印为Dict

{
"project1": {
    "alias1": {
      "command":"somecommand for alias1"
    }
  },
"project2": {
    "alias2": {
      "command":"somecommand for alias2"
    },
    "alias3": {
      "command":"somecommand for alias3"
    }
 }
{
'alias1':'command', # Command for alias1
'alias2':'command', # Command for alias2
'alias3':'command'  # Command for alias3
}

如何在python2中实现这一点?

首先,源JSON中有一个错误,它需要一个结束符
“}”

修复后,可以使用
json.loads
将其放入Python变量中,然后使用Python循环和条件对其进行运行,以提取所需内容。差不多

ss = json.loads( """ # JSON source as above
                     # etc
    """)
res = {}
for proj,v in ss.items():
    for alias,d in v.items():
        if alias.startswith("alias"):
            res[alias] = d["command"]

res
是您想要的dict,您可以使用
json.dumps
和(可能)
indent=0
sort\u keys=True
打印它。不确定这是否是您要找的:

result = {value:v for key in a for value in a[key] for item in a[key][value] for k,v in a[key][value].items()}

{'alias2': 'somecommand for alias2',
'alias3': 'somecommand for alias3',
'alias1': 'somecommand for alias1'}
你可以这样试试

def dict_parse(dict):
     dict_new = {}
     keys = dict.keys()
     for k in keys:
          key_new = dict[k].keys()
          for i in key_new:
               dict_new[i] = dict[k][i]
     return dict_new
输出将如下所示:

 {'alias1': {'command': 'somecommand for alias1'},
 'alias2': {'command': 'somecommand for alias2'},
 'alias3': {'command': 'somecommand for alias3'}}
我想你应该试试这个基于这个你可以得到你的精确输出你可以使用这个

print({i:j['command'] for k,v in df.items() for i,j in v.items() if i.startswith('alias')})

麦迪的可能复制品:不太可能。在我的例子中,我正在寻找打印顶级键及其子键的值。在我看来,这仍然是一个重复;之后你想用它做什么是无关紧要的。特别是当您没有表明您自己已经做出了任何努力来解决这个问题时,我想在这种情况下使用json比普通python字典有什么优势?(JSON中的错误是我首先注意到的-奇怪的是其他人没有提到它…)如果它是来自您不控制的应用程序的JSON,那么您就不能安全地依赖它被一致地打印出来,或者在将来的任何时候都保持这种状态。您需要一个完整的JSON解析来确保它被正确处理。