JSON форматирование навигационного питона - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь получить названия нескольких товаров, которые были в одном заказе. В «line_items» может быть несколько подразделов, где отображается информация о каждом элементе, заголовок является одним из параметров для каждого элемента.

[0] приносит мне название первого предмета.

[- 1] приносит мне последний заголовок элемента.

Как мне взаимодействовать с подразделами между ними? Есть ли способ вернуть все связанные названия заказов, есть ли 1 или более?

  r = requests.get("jsonURL", params="jsonparams")
  data = r.json()

  for item in data['orders']:
    purchased = item['line_items'][0]['title']
    purchased1 = item['line_items'][-1]['title']

Ответы [ 3 ]

0 голосов
/ 16 марта 2019

Надеюсь, это поможет вам.

r = requests.get("jsonURL", params="jsonparams")
data = r.json()

result = [items['items'] for items in data['orders']['line_items']]

Если вы хотите получить первый индекс:

print(result[0])

Если вы хотите получить первый индекс:

print(result[-1])
0 голосов
/ 16 марта 2019

JSON из вашего кода будет выглядеть примерно так:

    data =  {
        "orders": {
        "line_items": [
            {
                "title": "abc"
            },
            {
                "title": "def"
            },
            {
                "title": "ghi"
            },
            {
                "title": "jkl"
            },
            {
                "title": "mno"
            }
        ]
    }
}

Итак, чтобы получить заголовки для всех элементов, переберите каждый элемент в списке line_items, найдите ключ «title» и добавьте его значения в пустой список с именем purchased:

purchased = []
for item in data['orders']['line_items']:
    if 'title' in item.keys():
        purchased.append(item['title'])
print(purchased)
#Output:
['abc', 'def', 'ghi', 'jkl', 'mno']

Если вы также хотите получить количество каждого приобретенного товара, вы можете использовать Counter:

from collections import Counter
print(Counter(purchased))
#Output:
Counter({'abc': 1, 'def': 1, 'ghi': 1, 'jkl': 1, 'mno': 1})
0 голосов
/ 16 марта 2019

Вы можете сделать это, добавив внутренний цикл, подобный следующему:

r = requests.get("jsonURL", params="jsonparams")
data = r.json()

for items in data['orders']:
    for item in items['line_items']:
       print(item['title'])

Это выведет названия элементов в каждом из заказов.

Если вы хотите толькораспечатайте подмножество предметов, которые вы можете использовать срезом на items['line_items'].Если вы хотите напечатать только первые n элементов, вы должны написать items['line_items'][:n].Если вы хотите напечатать только последние n элементов, вы должны написать items['line_items'][-n].Вы даже можете объединить два, например items['line_items'][1:-2] пропустит первый и последний два элемента в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...