#python #json
#python #json
Вопрос:
Мне нужно проверить, есть ли у .json
файла "quantity": float
атрибут во всех списках, и добавить этот атрибут в те места, где его нет отдельно, но я не знаю, как это сделать (у меня нет опыта работы с форматом JSON).
Я пробовал .append
и .insert
функции, но ни одна из них не работает так, как мне нужно.
У меня есть список, подобный этому:
{
"id": 9746439,
"name": "Home Theater LG com blu-ray 3D, 5.1 canais e 1000W",
"quantity": 80,
"price": 2199.0,
"category": "Eletrônicos"
},
{
"id": 2162952,
"name": "Kit Gamer acer - Notebook Headset Mouse",
"price": 25599.0,
"category": "Eletrônicos"
},
Как вы можете видеть, во второй части нет атрибута «количество», и мне нужно добавить его следующим образом "quantity": 0
, но я понятия не имею, как это сделать. Это встречается несколько раз в моем списке, и я хотел бы знать, как я мог бы написать код, который нашел бы эти ошибки и добавил атрибут между «name» и «price», как и в остальной части списка.
Комментарии:
1. Вы можете просто назначить его с помощью записи
jsonObject["quantity"] = 0
вам просто нужно пройтись по списку, проверить, есть ли в нем количество, если не присвоить ему значение, как упоминалось ранее.
Ответ №1:
Вероятно, самый простой способ — загрузить файл json в структуру данных Python с помощью json.load()
, затем вставить quantity
элемент там, где он отсутствует, затем записать его в новый файл json.
import json
# open the input file and load the contents into a python datastructure
with open('myfile.json') as input:
data = json.load(input)
# iterate over each item
for item in data:
# if "quantity" is not present, add it
if 'quantity' not in item:
item['quantity'] = 99.99
# write the updated data to a new file
with open('myfile_new.json', 'w') as output:
json.dump(data, output)
Ответ №2:
jString = '''{
"lst":[
{
"id": 9746439,
"name": "Home Theater LG com blu-ray 3D, 5.1 canais e 1000W",
"quantity": 80,
"price": 2199.0,
"category": "Eletrônicos"
},
{
"id": 2162952,
"name": "Kit Gamer acer - Notebook Headset Mouse",
"price": 25599.0,
"category": "Eletrônicos"
}
]
}'''
jObj = json.loads(jString)
for x in jObj["lst"]:
if "quantity" not in x:
x["quantity"] = 0
Вы можете просто назначить атрибут и сохранить его в файле или там, где он вам понадобится впоследствии.
Комментарии:
1. Я пробовал это:
for case in broken_database: if case["quantity"] not in broken_database: case["quantity"] = 0
Но это выдает мне ошибкуKeyError: 'quantity'
2. Вы не опубликовали полную структуру файла Json, поэтому я действительно не могу предложить больше деталей, кроме того, что я привел. Если вы получите
KeyError
, я предполагаю, что вы недостаточно глубоко проникли в узлы.3. Мне удалось структурировать, следуя вашему совету и вышесказанному, в конце я рассматривал атрибут «товар» и «количество» как один, и это была ошибка
Ответ №3:
Я столкнулся с такой же головоломкой на днях и решил ее с помощью приведенного ниже кода. Я полностью согласен с тем, что это, вероятно, «ленивый» способ сделать это, но он очень прост для чтения.
import json
json_string = '''{"results":[
{
"id": 9746439,
"name": "Home Theater LG com blu-ray 3D, 5.1 canais e 1000W",
"quantity": 80,
"price": 2199.0,
"category": "Eletrônicos"
},
{
"id": 2162952,
"name": "Kit Gamer acer - Notebook Headset Mouse",
"price": 25599.0,
"category": "Eletrônicos"
}]}'''
json_dict = json.loads(json_string)
for item in json_dict["results"]:
try:
item['quantity']
except:
item['quantity'] = 0
Подход, который я использовал здесь, заключается в том, чтобы попробовать и исключить, давайте попробуем и выберем ключ количества в ваших данных, и, эй, если его там нет, давайте просто добавим его.
Дайте мне знать, как вы используете этот подход.
Комментарии:
1. Я попробовал код, который разместил здесь @ John Gordon, и он сработал как по волшебству, я запущу этот и посмотрю, что получится, спасибо!!