Удаление ненужных массивов из ответа JSON - PullRequest
0 голосов
/ 12 января 2019

Я использую API eBay и в своих ответах JSON он включает в себя множество ненужных массивов. Я пытаюсь удалить эти массивы с помощью регулярных выражений, но не могу найти точный требуемый.

До сих пор я придумал \[[^\{\}]*\], который соответствует квадратным скобкам, которые не содержат фигурные скобки

Фактический:

"childCategoryHistogram": [
    {
        "categoryId": [
            "175673"
        ],
        "categoryName": [
            "Computer Components & Parts"
        ],
        "count": [
            "21"
        ]
    },
    {
        "categoryId": [
            "175672"
        ],
        "categoryName": [
            "Laptops & Netbooks"
        ],
        "count": [
            "9"
        ]
    }
]

Ожидаемый:

"childCategoryHistogram": [
    {
        "categoryId": "175673"          ],
        "categoryName": "Computer Components & Parts",
        "count": "21"
    },
    {
        "categoryId": "175672",
        "categoryName": "Laptops & Netbooks",
        "count": "9"
    }
]

1 Ответ

0 голосов
/ 12 января 2019

Регулярное выражение - неправильный инструмент для этой работы. Не пытайтесь изменить текст JSON - измените структуру данных, в которую он разбирается.

def remove_empty_lists(item):
    if isinstance(item, list):
        if len(item) == 1:
            return remove_empty_lists(item[0])
        else:
            return [remove_empty_lists(n) for n in item]
    elif isinstance(item, dict):
        return {k: remove_empty_lists(v) for k, v in item.iteritems()}
    else:
        return item

... с учетом структуры данных Python, созданной на основе ваших заявленных данных, делает все правильно:

>>> from pprint import pprint
>>> pprint(content)
{'childCategoryHistogram': [{'categoryId': ['175673'],
                             'categoryName': ['Computer Components & Parts'],
                             'count': ['21']},
                            {'categoryId': ['175672'],
                             'categoryName': ['Laptops & Netbooks'],
                             'count': ['9']}]}
>>> pprint(remove_empty_lists(content))
{'childCategoryHistogram': [{'categoryId': '175673',
                             'categoryName': 'Computer Components & Parts',
                             'count': '21'},
                            {'categoryId': '175672',
                             'categoryName': 'Laptops & Netbooks',
                             'count': '9'}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...