【问题标题】:How can I get 'key' and 'value' from parsed JSON in python [closed]如何从 python 中解析的 JSON 中获取“键”和“值”[关闭]
【发布时间】:2021-07-13 03:19:51
【问题描述】:

今天我正在尝试做一些棘手的事情。

我正在尝试从解析的 JSON 中获取键和值,如下所示:

[{'minecraft.net': 'green'}, {'session.minecraft.net': 'green'}, {'account.mojang.com': 'green'}, {'authserver.mojang.com': 'green'}, {'sessionserver.mojang.com': 'red'}, {'api.mojang.com': 'green'}, {'textures.minecraft.net': 'green'}, {'mojang.com': 'green'}]

所以我会说例子:

[{"test1":"test2"}]

所以 test1 是键,test2 是值。

我想得到这些值!

for data in json:
print(data.key) # This should return the test1 string
print(data.value) # This sould return the test2 string

但这不起作用。所以如果有人知道我怎么能做到这一点!请告诉我!

【问题讨论】:

  • 这和JSON无关,这是关于字典的。
  • 你说得真早啊
  • 什么?您需要查看How to Askhelp center
  • API 正在返回 JSON soooo.... 我正在使用 JSON

标签: python json


【解决方案1】:

您在加载 json 数据时收到的是原生 Python Dict 或 List。 当您像在此处那样迭代字典列表时,data 是一个字典。

要从 dict 中提取值,您需要按名称查找键,在您的实例中:'minecraft.net', 'session.minecraft.net', 'account.mojang.com', ...

Python 字典的访问方式如下:data["minecraft.net"](返回“绿色”)

最简单的做法是(按照您的设置):

for data in json:
    for key, value in data.items():
        print(key)
        print(value)

基本上:

for dictionary in list:
    for key, value in dictionary.items():
        print(key)
        print(value)

阅读更多:w3schools: Python Loop Through a Dictionary

(编辑):摘要

问题不清楚,但变量“json”是一个类似文件的对象。 已解决的问题:

json = json.load(json)

【讨论】:

  • 这里假设 json 确实是一个字典列表,导入名为“json”的原生库并使用:json.loads() 使其正常工作。
  • 您的代码返回此 discord.ext.commands.errors.CommandInvokeError: 命令引发异常:AttributeError: 'bytes' object has no attribute 'items'
  • 那么你的“json”变量似乎不是一个列表,它是一个字节对象。你如何加载json数据?尝试使用: with open("file.json") as f: json = json.load(f.read())
  • 我不是从文件中读取,我是从 API 请求 JSON
  • 然后尝试使用 json = json.load(json) 来利用 JSON 库将类似字节的对象转换为 dicts 列表:) (注意: json.loads() 需要一个字符串,但 json.load() 需要一个类似字节的对象)
【解决方案2】:
json = [{'minecraft.net': 'green'}, {'session.minecraft.net': 'green'}, {'account.mojang.com': 'green'}, {'authserver.mojang.com': 'green'}, {
    'sessionserver.mojang.com': 'red'}, {'api.mojang.com': 'green'}, {'textures.minecraft.net': 'green'}, {'mojang.com': 'green'}]
for data in json:
    for key in data:
        print(key)
        print(data[key])

给我:

green
session.minecraft.net
green
account.mojang.com
green
authserver.mojang.com
green
sessionserver.mojang.com
red
api.mojang.com
green
textures.minecraft.net
green
mojang.com
green
PS C:\Users\jonas\OneDrive\Desktop\seconddesktop\newLocalWebsite> & C:/Users/jonas/AppData/Local/Programs/Python/Python39/python.exe c:/Users/jonas/OneDrive/Desktop/seconddesktop/newLocalWebsite/react-folder/src/components/test.py       
minecraft.net
green
session.minecraft.net
green
account.mojang.com
green
authserver.mojang.com
green
sessionserver.mojang.com
red
api.mojang.com
green
textures.minecraft.net
green
mojang.com
green

通过遍历 dict 你得到键,写data[key],你得到值!

【讨论】:

  • 这在使用解析的 json 时不起作用,当使用未解析的 json 时,它会打印一堆随机数并输入错误
  • 你能给我一个不工作的json的例子吗?通过您的两个示例,它给了我正确的输出!
  • @Pixeluted "not working" 不是一个有用的问题描述。
  • 我在使用你的代码时使用这个 JSON [{'minecraft.net': 'green'}, {'session.minecraft.net': 'green'}, {'account.mojang .com': 'green'}, {'authserver.mojang.com': 'green'}, {'sessionserver.mojang.com': 'red'}, {'api.mojang.com': 'green'} , {'textures.minecraft.net': 'green'}, {'mojang.com': 'green'}]
  • @Pixeluted 你发布的不是 JSON,而是一个字典列表
猜你喜欢
  • 2013-02-28
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多