Как вернуть только объект, содержащий строку из URL XML/JSON

#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)