调用Great Expectations的expect_column_values_to_match_json_schema入参报错如何解决
错误根因说明
你两次报错都和你传入的json_schema参数无关,属于对方法逻辑的误解导致的问题:
- 第一次报错:
expect_column_values_to_match_json_schema方法默认会对目标列的每一个值执行json.loads()转JSON对象操作,你要校验的abc列里存储的是已经解析完成的Python dict类型,不是JSON字符串,所以执行转换时抛出类型错误。 - 第二次报错:Python原生的
str()方法转换dict时会用单引号包裹键名,不符合JSON要求的双引号规范,所以json.loads(str(jschema))会抛出格式错误,这一步操作本身完全多余,该方法的json_schema参数本身就支持直接传入Python dict类型。
解决方案
你只需要将目标列的dict值提前转为JSON字符串即可,保留你最初写的schema配置不用修改:
import json # 先把abc列的dict转成JSON字符串,不想改原列可以复制到临时列操作 df_ge['abc'] = df_ge['abc'].apply(json.dumps) # 直接用最初的代码调用即可,schema不需要做任何转换 jschema = { "type" : "object", "properties" : { "xyz" : {"type" : "string"} } } df_ge.expect_column_values_to_match_json_schema( column='abc', json_schema=jschema, row_condition="a=='1' and b=='2' and c=='3'", condition_parser='pandas' )
内容的提问来源于stack exchange,提问作者AbtPst
相关产品推荐
相关产品推荐

