具有扩展功能的jsonpath
eha-jsonpath的Python项目详细描述
jsonpath扩展
提供新的Extensions to the jsonpath_ng python library以提供通常请求的函数。这些函数的上下文始终是从所提供的jsonpath的解析中提供的值除非显式标记,否则所有函数都将把列表或单个值作为输入处理如果您对函数的意图感到困惑,行为可以查看the tests。
用法
fromeha_jsonpathimportparse# The following is pseudocode, don't copy it.obj={'my':'object'}path='$.some.jsonpath.`fn(arg1, arg2)`'matches=parse(path).find(obj)
新扩展名
铸件
尝试对jsonpath表达式的结果应用强制转换。 当路径解析为数组时,将对数组项进行不可见操作。
用法:$.my.path.`cast({castType})`
支持的casttypes和行为:
CASTS={'int':lambdax:_cast_int(x),# see below'boolean':lambdax:bool(x),'string':lambdax:str(x),'float':lambdax:float(x),'json':lambdax:json.loads(x),# standard json library'none':lambdax:x,'null':lambdax:None}def_cast_int(obj):# fixes issues when trying to cast a float str -> int# int('1.09') throws ValueErrortry:returnint(obj)exceptValueError:returnint(float(obj))
拆分列表
获取给定jsonpath处的字符串,并尝试将其拆分为给定的delimiter
数组,然后将数组项强制转换为特定的castType
。请参见“强制转换”部分中的有效强制转换。
解析路径必须是字符串。在路径解析为数组的情况下,不会对数组项进行虚拟操作。
用法:$.my.path.`splitlist({delimiter}, {castType})`
匹配
根据提供的match_term
检查在jsonpath中找到的值。如果未找到该值,则返回null_value
。当路径解析为数组时,将对数组项进行不可见操作。
用法:$.my.path.`match({match_term}, {null_value})`
需要逗号后有空格!
行为:
result=(value==match_term)ifvalue!=Noneelsenull_value
不匹配
提供匹配的相反项。根据提供的match_term
检查在jsonpath中找到的值。如果未找到该值,则返回null_value
。当路径解析为数组时,将对数组项进行不可见操作。
用法:$.my.path.`notmatch({match_term}, {null_value})`
需要逗号后有空格!
行为:
result=(value!=match_term)ifvalue!=Noneelsenull_value
分析日期时间
尝试从给定jsonpath中找到的字符串分析iso格式的datetime然后返回由python数组片指定的已分析日期时间的一部分或全部。当路径解析为数组时,将对数组项进行不可见操作。strptime_str
格式取自python strptime behavior在return_slice
中使用的数组切片表示法使用标准的slice operator,使用分号分隔的参数,如:
defargs_to_slice(cls,return_slice,obj):defaults=[0,None,None]parts=[]forx,iinenumerate(return_slice.split(':')):try:parts.append(int(i))exceptValueError:parts.append(defaults[x])returnobj[slice(*parts)]
用法:$.my.path.`datetime({strptime_str}, {return_slice})`
需要逗号后有空格!
散列
返回添加到提供的salt
中的解析jsonpath值的128位十六进制MD5哈希。这对于从一条源信息以及一些惟一的salt生成UUID兼容值非常有用这允许非uuid外键每次都可靠地转换为相同的uuid兼容值。当路径解析为数组时,将对数组项进行不可见操作。
用法:$.my.path.`hash({salt})`
模板
将在解析的jsonpath中找到的值替换为带单个替换占位符的格式化字符串。当路径解析为数组时,将对数组项进行不可见操作。
用法:
格式的使用类似于:my name is {}
$.my.path.`template({template_format)`
值替换
将匹配match_value
的解析值替换为replacement_value
。当路径解析为数组时,将对数组项进行不可见操作。
用法:$.my.path.`valuereplace({match_value}, {replacement_value})`
需要逗号后有空格!
行为:
replacement_valueif(match_value==value)elsevalue
字典替换
将与传递的字典中的键匹配的解析值替换为来自同一字典的相应值。当路径解析为数组时,将对数组项进行不可见操作。dictionary参数应该是一个字符串化的python字典。
用法:$.my.path.`dictionaryreplace({stringified_python_dictionary})`
结果是:在字典中,路径值替换为匹配键的值
{em1}$行为:
(每)