#python #json #python-requests
Вопрос:
Если кто-нибудь может помочь мне получить только нужную строку из синтаксического анализа URL:
import requests import json def get_stock(sku): params = {'ItemId': sku} base_url = 'http://10.0.0.25/api/GetSku?ItemId=' response = requests.get(base_url, params=params) json_parsed = json.loads(response.read) return json_parsed print(get_stock(101025HRLONDON))
На выходе получается:
[ { "ItemId": "101025HRLONDON", "Site": "12", "Warehouse": "17", "availablePhysical": 1.0 }, { "ItemId": "101025HRLONDON", "Site": "33", "Warehouse": "33", "availablePhysical": 1.0 }, { "ItemId": "101025HRLONDON", "Site": "12", "Warehouse": "34", "availablePhysical": 1.0 }, { "ItemId": "101025HRLONDON", "Site": "77", "Warehouse": "42", "availablePhysical": 1.0 } ]
Код работает хорошо и возвращает все запасы товаров по ItemId.
Но мой вопрос в том, как я могу вернуть единственный объект, содержащий : "Site":"12"
Спасибо!
Комментарии:
1. хм, тебе нужно быть более конкретным. существует несколько объектов, которые совместно
101025HRLONDON
используют идентификатор элемента . По каким критериямSite: 12
, например, выбирается тот, с которым? Я полагаю, что вы также могли бы получить первый элемент списка, который также удовлетворил бы просьбу.
Ответ №1:
что-то вроде приведенного ниже
import requests from typing import List,Dict def get_stock(sku:str,site_id:str)-gt; List[Dict]: base_url = 'http://10.0.0.25/api/GetSku?ItemId=' response = requests.get(base_url, params={'ItemId': sku}) if response.status_code == 200: return [item for item in response.json() if item['Site'] == site_id] else: return None
Комментарии:
1. Спасибо, просто добавьте последние две строки в мой код, и он работает хорошо.
2. Вы, вероятно, имели в виду
base_url = 'http://10.0.0.25/api/GetSku'
Ответ №2:
Заменять:
return json_parsed
Автор::
if any(i['Site'] == '12' for i in json_parsed): return json_parsed
Ответ №3:
Вы можете filter
просмотреть список, используя нужный вам ключ. Функция, которую вы написали, верна, вам нужно только манипулировать возвращаемыми данными.
filtered_stocks = list(filter(lambda x: x['Site']=="12", get_stock("101025HRLONDON")) print(filtered_stocks)