【问题标题】:How to read json array data by Python pandas如何通过 Python pandas 读取 json 数组数据
【发布时间】:2020-07-26 02:55:18
【问题描述】:

我们有一个现有的脚本来从 S3 读取 json 文件并转换成 parquet 格式,接收以下格式的数据并能够通过以下代码读取,

json 文件内容: [ {"Id":"123124","Account__c":"0ereeraw334U","Active__c":"true"} ]

转换成数据框的现有代码: df = pd.read_json(obj['Body'],dtype='unicode',convert_dates=False)

但是如何以同样的方式读取下面的json数据,

{"cust_land_detail":[ {"Id":"45634653","Account__c":"sersff23se","Active__c":"true"} ] }

注意:文件有根元素,因此无法对数据进行编码。

【问题讨论】:

    标签: arrays json pandas


    【解决方案1】:

    您是否有权访问生成进入 S3 存储桶的数据的任何内容?如果是这样,那么在这方面竭尽全力为自己简化格式可能是有意义的。这也是假设该数据只有一个消费者,或者所有消费者都同意该更改。

    我想到的其他选择:

    • 解析为 JSON,使用数组的级别序列化回 - 虽然这很昂贵,因为您最终会解析两次 JSON:
      s = json.dumps(json.loads(s)["cust_land_detail"])

    • 手动解析出您需要的块——假设结构简单、可知且不太可能改变:
      preamble, postamble = '"{"cust_land_detail":', '}'
      s = s[len(preamble):-len(postamble)]

    【讨论】:

      【解决方案2】:

      我通过使用下面的“json_normalize”找到了一个解决方案,

      df=pd.read_json(obj['Body'],dtype='unicode',convert_dates=False)
      data=json_normalize(df['cust_land_detail'])
      

      我得到两种类型的 JSON 文件,一种是没有根元素的,另一种是有根元素的,所以我需要使用 read_json 读取 json,然后通过根元素与参数传递的根值进行比较来规范化。

      【讨论】:

        猜你喜欢
        • 2013-01-22
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 2017-03-13
        • 2019-08-26
        • 1970-01-01
        • 2011-12-31
        • 2021-05-04
        相关资源
        最近更新 更多