Python: Декодирование записи JSON, игнорирующее внутренний ключ

#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. Я внес правку, чтобы ответить на ваши отзывы. Я надеюсь, что это будет полезно.