Удаление \ u0000 из вложенного объекта JSON перед ВСТАВКОЙ в PostgreSQL - PullRequest
1 голос
/ 05 августа 2020

Я использую Python для вставки объектов JSON в таблицу PostgreSQL DB. Вложенные JSON очень вложены. Строки в некоторых из этих JSON объектов включают '\ u0000', который является недопустимым символом и UNICODE, и должны быть очищены перед вставкой в ​​PG.

Каким будет самый быстрый способ сделать это?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Не могли бы вы посмотреть, работает ли это для вас в качестве параметра в вашем вызове execute()?

>>> a = '\u0000'
>>> json.dumps(a).replace(r'\u0000', '')
'""'
>>> 

r'' предназначен для необработанной строки, чтобы помочь обойти проблемы с цитированием.

0 голосов
/ 05 августа 2020

Вот что я придумал.

def sanitize(obj):
    if isinstance(obj, str):
      return obj.replace('\u0000', '')
    if isinstance(obj, list):
      return [sanitize(item) for item in obj]
    if isinstance(obj, tuple):
      return tuple([sanitize(item) for item in obj])
    if isinstance(obj, dict):
      return {k:sanitize(v) for k,v in obj.items()}
    return obj

Есть ли более элегантное решение, которое мне здесь не хватает?

...