Необходимо посчитать количество элементов JSON с определенным значением?

JSON:

x = {"order": {"id": 1, "statuscode": "SUCCESS_ENDED"},
    {"order": {"id": 2, "statuscode": "PROCESSING"},
    {"order": {"id": 3, "statuscode": "SUCCESS_ENDED"},
    {"order": {"id": 4, "statuscode": "SUCCESS_ENDED"}

Нужно через цикл вывести на print кол-во элементов, у которых statuscode: SUCCESS_ENDED


Ответы (1 шт):

Автор решения: Dmitry

У вас переменная x "слегка" непонятна. На JSON она слаба похожа. Давайте наченем с того что приведем ее хоть к какому то типу данных, например вот так:

x = [{"order": {"id": 1, "statuscode": "SUCCESS_ENDED"}},
    {"order": {"id": 2, "statuscode": "PROCESSING"}},
    {"order": {"id": 3, "statuscode": "SUCCESS_ENDED"}},
    {"order": {"id": 4, "statuscode": "SUCCESS_ENDED"}}]

Для python это тип данных list, что является итерируемым типом. В каждом элементе list лежит order со значениями. Давайте по ним пробежимся и посчитаем:

>>> count = 0
>>> for i in x:
...   for order, value in i.items():
...     if value["statuscode"] == "SUCCESS_ENDED":
...       count+=1
... 
>>> count
3

И еще один вариант, если мы остаемся при своем и считаем, что переменная x такая какая есть, то ее хотя бы надо принять за строку:

x = '''[{"order": {"id": 1, "statuscode": "SUCCESS_ENDED"},
    {"order": {"id": 2, "statuscode": "PROCESSING"}
    {"order": {"id": 3, "statuscode": "SUCCESS_ENDED"}
    {"order": {"id": 4, "statuscode": "SUCCESS_ENDED"}'''

и с помощью модуля re найти все совпадения с SUCCESS_ENDED

>>> import re
>>> pattern = r"SUCCESS_ENDED"
>>> all_mathces= len(re.findall(pattern, x))
>>> all_mathces
3
→ Ссылка