【问题标题】:How to fill missing json keys with key and null value?如何用键和空值填充缺少的 json 键?
【发布时间】:2020-09-17 00:20:45
【问题描述】:

比如我在做一个json文件的ETL,有时候这个文件没有自带一些jsons的key,所以需要用缺失的key和null作为value来填充缺失的key和value。

这是一个json文件的例子:

"data" :{
"data_info" :{
"version" :value ,
"data_name" : value ,
"data_number" : value ,
"package_name" : value
}

这是缺少字段的场景:

"data" :{
"data_info" :{
"data_name" : value ,
"package_name" : value
}

这是我想做的事情:

"data" :{
"data_info" :{
"version" :null ,
"data_name" : value ,
"data_number" : null ,
"package_name" : value
}

我正在使用带有 python SDK 的 apache beam,并尝试过,但没有成功...

def fill_missing_keys(data):

  data = json.loads(data['metadata'])
  data = {'data': {'data_info': data.get("data_name", None)   {'version': data.get("version", None) , 'data_name': data.get("version", None)... }
  
  return data

【问题讨论】:

    标签: python json etl apache-beam


    【解决方案1】:

    您需要在嵌套字典上调用get()

    data = {
        'data': {
            'data_info': {
                'data_name': data['data']['data_info'].get('data_name'),
                'version': data['data']['data_info'].get('version'),
                'data_number': data['data']['data_info'].get('data_number'),
                'package_name': data['data']['data_info'].get('package_name')
            }
        }
    }
    

    使用.get() 时,结果默认为None,无需显式指定。

    一种不那么冗长的方法是提供一个默认字典并使用.update() 方法将 JSON 中的值合并到其中。

    data = {
        'data': {
            'data_info': {
                'data_name': None, 
                'version': None, 
                'data_number': None, 
                'package_name': None
            }.update(data['data']['data_info'])
        }
    }
    

    【讨论】:

    • 也许还包括默认值None?即....get('data_name', None)?
    • 这是使用.get()时的默认默认值。
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 2018-07-18
    • 2020-10-21
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    相关资源
    最近更新 更多