【问题标题】:Parsing Json containing multiple json objects wrapped in string from s3解析包含多个 json 对象的 Json,这些对象包含在来自 s3 的字符串中
【发布时间】:2021-08-04 08:42:26
【问题描述】:

我在 S3 中有一个包含多个 json 对象的 json 文件,其结构如下所示。

"{"category" : "random", "a": 1, "b": 2, "c": 3}"
"{"category" : "automobile", "brand": "bmw", "car": "x3", "price": "100000"}"
"{"category" : "random", "a": 7, "b": 8, "c": 9}"

如您所见,这个 json 文件包含多个 json 对象,这些对象被包装为字符串。

我想从 s3 读取这个 json 文件并解析它。所以我做了如下。

import boto3
import json

s3 = boto3.resource('s3')

content_object = s3.Object(bucket,key)
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(file_content)
print(json_content['Details'])

但我收到以下错误。 json.decoder.JSONDecodeError: Extra data

我认为这是因为这个 json 文件包含多个 json 对象,每个对象都包含在一个字符串中。

如果我能设法在每个 json 对象的末尾和开头获取每个引号,我想我可以解析它。

但我不太确定这是否是唯一(或最好)的方法(如果我设法以有效的方式做到这一点)

无论如何都要解析这个 json 吗?

注意:每个 Json 不需要具有所有相同的属性,虽然这个 json 文件我只放了 3 个对象,但我想将它们缩放到更大的比例。

【问题讨论】:

    标签: python json amazon-s3 boto3


    【解决方案1】:

    您必须逐行执行。这将产生一个对象列表。

    import boto3
    import json
    
    s3 = boto3.resource('s3')
    
    content_object = s3.Object(bucket,key)
    file_content = content_object.get()['Body'].read().decode('utf-8')
    json_content = [json.loads(line) for line in file_content.splitlines()]
    print(json_content)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多