Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何在嵌套JSON上使用JSON转储以避免双重编码_Python_Json_Amazon S3 - Fatal编程技术网

Python如何在嵌套JSON上使用JSON转储以避免双重编码

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读取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 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循环。您不能反序列化该字段吗?谢谢!这起作用了,我很感激关于最后一行的提示。