#json #python-3.x
Вопрос:
Мне нужно преобразовать ввод JSON в CSV, это было бы легко, если бы записи были плоскими. Однако каждая запись записывается таким образом:
'accountNumber': {'value': b'8764622708'}, 'subscriberNumber': {'value': b'8764622708'},
Каков лучший способ игнорировать «или удалить значения ключей», чтобы записи были такими?
'accountNumber': b'8764622708', 'subscriberNumber': b'8764622708',
Обновить
Решение с использованием понимания словаря работает, но мне нужно добавить больше вариантов, потому что в моем json было больше типов полей.
{k:v["value"] if v is not None and type(v) is dict and "value" in v else v if type(v) is dict and "value" not in v else v for (k,v) in message_value.items() }
Однако теперь мне нужно придумать способ сделать это рекурсивно, потому что есть записи, в которых есть записи с этим тегом «значение».
Ответ №1:
Я бы попробовал разобраться здесь со словарем, так как это практически словарь:
d1 = {'accountNumber': {'value': b'8764622708'}, 'subscriberNumber': {'value': b'8764622708'}}
Затем такое понимание, как это:
{k:v["value"] for (k,v) in d1.items()}
Дал бы тебе это:
{'accountNumber': b'8764622708', 'subscriberNumber': b'8764622708'}
Редактировать:
Это решило бы проблему, если бы в какой-то момент не было значений, которые вызывают ошибку типа:
d2 = {'accountNumber': {'value': b'8764622708'}, 'subscriberNumber': {'value': b'8764622708'},'foo': None}
Понимание словаря с условием «если-иначе».
{k:v["value"] for k,v in d2.items() if v is not None}
Я бы настроил условия и т. Д. В зависимости от случая.
{'accountNumber': b'8764622708', 'subscriberNumber': b'8764622708'}
Комментарии:
1. Это должно сработать. но я получаю ошибку ввода: объект «Не типизированный» не доступен для подписки. Я верю, что это потому, что у меня есть некоторые ключи, в которых нет никакой ценности, только нет.
2. Я внес правку, чтобы ответить на ваши отзывы. Я надеюсь, что это будет полезно.