You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON字符串转仅含部分属性的Person类列表的简便反序列化方法

当然有简便方法啦!不同编程语言的主流JSON序列化库都提供了忽略多余字段的能力,不用手动逐个处理JSON对象,和你之前反序列化带id的Person类一样简单。下面分几种常用场景给你说明:

解决方法

1. Java(Jackson库)

Jackson是Java生态里最常用的JSON处理库,两种方式都很简便:

  • 快速忽略所有未知字段
    直接给Person类添加注解,让Jackson自动跳过类中未定义的字段(包括id):

    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Person {
        private String name;
        private String dob;
        private String sex;
    
        // 构造器、Getter、Setter省略
    }
    

    反序列化代码和之前完全一样:

    ObjectMapper mapper = new ObjectMapper();
    List<Person> personList = mapper.readValue(jsonString, new TypeReference<List<Person>>() {});
    
  • 精准指定要保留的字段
    如果想更严谨,只映射name、dob、sex三个字段,可以用字段过滤:

    import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
    import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
    
    // 先给Person类标记过滤器
    @JsonFilter("personFilter")
    public class Person {
        private String name;
        private String dob;
        private String sex;
        // 构造器、Getter、Setter省略
    }
    
    // 反序列化时配置过滤器
    ObjectMapper mapper = new ObjectMapper();
    SimpleFilterProvider filterProvider = new SimpleFilterProvider()
            .addFilter("personFilter", SimpleBeanPropertyFilter.filterOutAllExcept("name", "dob", "sex"));
    mapper.setFilterProvider(filterProvider);
    
    List<Person> personList = mapper.readValue(jsonString, new TypeReference<List<Person>>() {});
    

2. C#(Newtonsoft.Json库)

用Json.NET(Newtonsoft.Json)的话,操作同样简单:

  • 忽略未知字段
    给Person类添加注解,自动跳过未定义的id字段:

    using Newtonsoft.Json;
    
    [JsonIgnoreProperties(UnknownIgnore = true)]
    public class Person
    {
        public string Name { get; set; }
        public string Dob { get; set; }
        public string Sex { get; set; }
    }
    

    反序列化代码和之前一致:

    List<Person> personList = JsonConvert.DeserializeObject<List<Person>>(jsonString);
    
  • 仅映射指定字段
    也可以给需要的属性标注[JsonProperty],未标注的字段会被自动忽略:

    using Newtonsoft.Json;
    
    public class Person
    {
        [JsonProperty]
        public string Name { get; set; }
        [JsonProperty]
        public string Dob { get; set; }
        [JsonProperty]
        public string Sex { get; set; }
    }
    

3. Python(Pydantic/标准库)

Python里用Pydantic库是最省心的选择,自动忽略多余字段:

from pydantic import BaseModel
import json

class Person(BaseModel):
    name: str
    dob: str
    sex: str

# 直接反序列化即可,自动跳过id字段
json_str = '[{"id":1,"name":"Johnny","dob":"12/10/1986","sex":"Male"},{"id":2,"name":"Sarah","dob":"3/7/1979","sex":"Female"}]'
person_list = list[Person].model_validate_json(json_str)

如果只用标准库json模块,也可以靠字典推导过滤字段:

from dataclasses import dataclass
import json

@dataclass
class Person:
    name: str
    dob: str
    sex: str

def load_persons(json_str):
    json_data = json.loads(json_str)
    return [Person(**{k:v for k,v in item.items() if k in ['name','dob','sex']}) for item in json_data]

内容的提问来源于stack exchange,提问作者C. Dodds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:26