Итак, мне нужно получить раздел «значение» из json, который должен выглядеть примерно так:
{
"id": "<profile identifier>",
"name": "<player name>",
"properties": [
{
"name": "textures",
"value": "<base64 string>",
"signature": "<base64 string; signed data using Yggdrasil's private key>" // Only provided if ?unsigned=false is appended to url
}
],
"profileActions": []
}
Мой код сейчас выглядит так, но я не могу понять, как получить значение, поскольку оно находится внутри раздела свойств.
skin_url = "https://sessionserver.mojang.com/session/minecraft/profile/" + data['id'] + "?unsigned=false"
skin_r = requests.get(skin_url)
skin_data = json.loads(skin_r.text)
print(skin_data["properties"]["value"])
У кого-нибудь есть идеи?
Вот подробности ошибки, которую я получил:
Traceback (most recent call last):
File "C:\Users\myname\Python\numbers.py", line 15, in <module>
print(skin_data["properties"]["value"])
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
TypeError: list indices must be integers or slices, not str
@Benevos Значение, связанное с ключом «свойства», представляет собой список, а не массив.






Пытаться:
print(skin_data.get('свойства')[0].get('значение'))
Это потерпит неудачу, если ключ «свойства» отсутствует.
Ошибка, с которой вы столкнулись, связана с тем, что «свойства» — это список, и вы пытаетесь получить к нему доступ как к словарю. Вам нужно перебирать список, чтобы получить доступ к «значению» внутри списка «свойств».
skin_url = "https://sessionserver.mojang.com/session/minecraft/profile/" + data['id'] + "?unsigned=false"
skin_r = requests.get(skin_url)
skin_data = json.loads(skin_r.text)
# Check if "properties" is not empty
if skin_data.get("properties"):
# Iterate through the list of properties
for prop in skin_data["properties"]:
if prop.get("name") == "textures" and prop.get("value"):
skin_value = prop["value"]
print(skin_value)
else:
print("No properties found in the JSON.")
Если ключ «свойства» существует, ожидается, что его значение будет списком. Вам нужно будет перебрать этот список.
Всегда проверяйте статус после любого вызова метода HTTP (в данном случае GET).
Изолируйте свои параметры от URL-адреса.
Объект Requests.models.Response имеет удобную функцию json().
Поэтому:
import requests
data = {
"id": "your id goes here"
}
url = "https://sessionserver.mojang.com/session/minecraft/profile/" + data["id"]
params = {
"unsigned": "false"
}
with requests.get(url, params=params) as response:
response.raise_for_status()
skin_data = response.json()
for p in skin_data.get("properties", []):
print(p.get("value"))
properties— этоarray, поэтому вам необходимо указать индекс. Попробуйтеskin_data["properties"][0]["value"]