Python как использовать JSON дампы на вложенном JSON, чтобы избежать двойного кодирования - PullRequest
0 голосов
/ 02 марта 2020

Я читаю CSV из S3, используя следующий код:

s3 = boto3.client('s3','us-east-1')
bucket = "bucket"
key = "key"

obj = s3.get_object(Bucket=bucket, Key=key)
fieldnames = [i for i in range(0,13)]
lines1 = obj['Body'].read().decode('utf-8').split('\n')
testls = [row for row in csv.DictReader(lines1[1:], fieldnames)]
out = json.dumps([row for row in testls])

, но проблема в том, что одно из полей в CSV представляет собой JSON, поэтому результирующая строка JSON из последний шаг выглядит так:

 {"Date": "2020-03-02 15:18:10.724017", "First?": "", "metadata": "{\"field1\":\"NULL\"}"}

как мне избежать этого?

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете расширить метаданные до python, когда будете читать строки, чтобы они были интегрированы в строку json. Как примечание, testls - это уже список, нет необходимости в дополнительном понимании списка.

s3 = boto3.client('s3','us-east-1')
bucket = "bucket"
key = "key"

obj = s3.get_object(Bucket=bucket, Key=key)
fieldnames = [i for i in range(0,13)]
lines1 = obj['Body'].read().decode('utf-8').split('\n')
testls = []
for row in csv.DictReader(lines1[1:], fieldnames):
    row["metadata"] = json.loads(row["metadata"])
    testls.append(row)
out = json.dumps(testls)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...