Как записать значение с JSON файла в pytho
Имеется json файл
{
"article": [
{
"a1": "60",
"a2": "70",
"a3": "95",
"a4": "48",
"a5": "30",
"a6": "16",
"a7": "74",
"a8": "52",
"a9": "36",
"a10": "87",
"a11": "110",
"a12": "92",
"a13": "66",
"a14": "62",
"a15": "65"
}
]
}
Необходимо все значения(именно числа, а не "a1","a2"...) записать в массив. Самому не получилось решить задачу.
def test(self):
with open('test.json') as a:
file_content = a.read()
data = json.loads(file_content)
data1 = data["article"]
for i in data1:
i = data[0][a + i]
i = i + 1
print(i)
print(data1)
Ещё вопрос для моего продвижения в понимании кода, что обозначает подчёркнутый код?

Ответы (2 шт):
Автор решения: Amgarak
→ Ссылка
import json
# Открываем файл
with open('C:\\Users\\Amgarak\\Desktop\\myJson.json', 'r') as file:
data = json.load(file)
# Забираем значения из словарей в списке словаря "article"
article_values = data['article'][0].values()
# dict_values(['60', '70', '95', '48', '30', '16', '74', '52', '36', '87', '110', '92', '66', '62', '65'])
# Теперь можно воспользоваться итерацией по полученным значениям
# Преобразуем строки в числа и записываем в массив
list_number = [int(value) for value in article_values]
print(list_number)
Вывод в консоль:
[60, 70, 95, 48, 30, 16, 74, 52, 36, 87, 110, 92, 66, 62, 65]
with open('test.json') as file: - мы открываем файл и получаем объект файла, который через ключевое слово as присваиваем переменной file.
a.read() - тут из названия функции всё очевидно, мы читаем полученные файл и возвращаем его в виде строк.
json.load(file) - так же читает полученные данные, но автоматически их конвертируем в объекты Python такие как словари, списки.
Автор решения: Namerek
→ Ссылка
В качестве варианта.
pip install jmespath
import jmespath as jp
data = {
"article": [
{
"a1": "60",
"a2": "70",
"a3": "95",
"a4": "48",
"a5": "30",
"a6": "16",
"a7": "74",
"a8": "52",
"a9": "36",
"a10": "87",
"a11": "110",
"a12": "92",
"a13": "66",
"a14": "62",
"a15": "65"
}
]
}
print(jp.search("article[*].*[]", data))
['60', '70', '95', '48', '30', '16', '74', '52', '36', '87', '110', '92', '66', '62', '65']