看起来像
[
{
"userId": "jacob.smith@jacob.com",
"firstname": "Jacob",
"lastname": "Smith",
"state": "ACTIVE",
"ibmUniqueId": "someID",
"email": "jacob.smith@jacob.com",
"phonenumber": "3037773456",
"id": "someID",
"uaaGuid": "someGuid",
"accountId": "someAccountID",
"role": "MEMBER",
"invitedOn": "",
"photo": ""
},
some other user etc
]
所以我正在将我写的这个怪兽bash脚本转换为python,因为它在bash中变得有点太疯狂了,我觉得python为我在bash中实现的复杂性提供了更好的处理方式。
因此,当我参加此速成班以提高我的python技能时,我现在陷入了困境。
这是我的代码
command = "ibmcloud account users --output json"
j = json.loads(subprocess.check_output(command, shell=True))
for (k, v) in j.items():
print("Key: " + k)
print("Value: " +str(v))
从json可以看出,没有什么可以直接指定我可以放入['someindex'] ['userId']并拉回所有userId的顶级索引。那就是我现在想要的主要内容是将所有的userId都放入并将它们猛击成一个变量或我可以循环通过的东西。但是我已经尝试过在这里可以在Stack上找到的所有答案,而且我不断遇到各种问题,例如
AttributeError:'list'对象没有属性'items'(为此,我将[0]放进去,但是当然只返回第一个值)
或AttributeError:“ str”对象没有属性“ userId”
谢谢大家的帮助。我确定它有些愚蠢。我使用过的大多数json至少都有一个父索引,我可以引用它,然后从那里开始。
当我为此使用jq时,只是
jq -r '.[].userId'
最佳答案
您可以为此使用简单的列表理解:
output = subprocess.check_output(
['ibmcloud', 'account', 'users', '--output', 'json'])
json_data = json.loads(output)
user_ids = [obj['userId'] for obj in json_data]
print('Got user IDs: {!r}'.format(user_ids))
关于python - 没有索引解析Json,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56029075/