Python如何在嵌套JSON上使用JSON转储以避免双重编码
我正在使用以下代码从S3读取CSV:Python如何在嵌套JSON上使用JSON转储以避免双重编码,python,json,amazon-s3,Python,Json,Amazon S3,我正在使用以下代码从S3读取CSV: 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 c
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\"}"}
如何避免这种情况?您可以在读取行时将元数据扩展为python dict,以便将其集成到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)
这是件坏事吗?如果您想将json字符串保持为字符串,那么json将不得不对其进行转义。如果要将元数据扩展为python dict,可以执行
row[“metadata”]=json.loads(row[“metadata”])
操作。您可能需要将该列表解析展开为for循环。您不能反序列化该字段吗?谢谢!这起作用了,我很感激关于最后一行的提示。