小编Vu *_*ung的帖子

在jsonpath中过滤时如何获取第一个元素?

所以我正在研究下面的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.

java jsonpath

9
推荐指数
1
解决办法
3554
查看次数

如何序列化在 pydantic 中扩展内置类型的自定义类型?

目前我正在使用 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 …

python serialization json pydantic

8
推荐指数
1
解决办法
4253
查看次数

标签 统计

java ×1

json ×1

jsonpath ×1

pydantic ×1

python ×1

serialization ×1