所以我正在研究下面的json:
{
"id": "",
"owner": "some dude",
"metaData": {
"request": {
"ref": null,
"contacts":[
{
"email": null,
"name": null,
"contactType": "R"
},
{
"email": null,
"name": "Dante",
"contactType": "S"
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想检索name联系人的类型S,只检索返回的第一个.
在此路径中使用jsonpath "$..contacts[?(@.contactType == 'S')].name"始终返回一个字符串数组,因为过滤器操作始终将结果作为数组返回.
所以,我想"$..contacts[?(@.contactType == 'S')].name[0]"和"$..contacts[?(@.contactType == 'S')][0].name",但没有运气.那些路径返回空结果.
所以我的问题是,在jsonpath中使用过滤器时,有没有办法获得第一个元素.我目前正在使用jayway jsonpath v2.2.0.
目前我正在使用 FastAPI 和 pydantic 作为序列化器。问题是,我们在服务器端使用雪花 id,这意味着我们需要在发送到客户端(javascript)之前将这些 id 转换为字符串,因为 id 大于 JS 的MAX SAFE INTEGER。
所以我尝试创建一个新类来扩展 python 的 int 类型并自定义它的序列化和反序列化方式。这是我的代码:
class SnowflakeId(int):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v: str):
return int(v)
@classmethod
def __modify_schema__(cls, field_schema: dict) -> None:
field_schema['type'] = 'string'
Run Code Online (Sandbox Code Playgroud)
这是模型:
class BaseModel(pydantic.BaseModel):
__abstract__ = True
id: SnowflakeId
class Config:
orm_mode = True
arbitrary_types_allowed = True
json_encoders = {
SnowflakeId: lambda v: str(v)
}
alias_generator = camelize
allow_population_by_field_name = True
Run Code Online (Sandbox Code Playgroud)
当从 json 字符串反序列化为 int id …