看起来像

[
  {
   "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/

10-10 18:32
查看更多