如何为含未知数量子字段的非数组父属性编写JSON类
处理未知子字段数量的
amounts字段JSON类编写方案 针对你遇到的amounts字段子项数量未知、且为字符串键+整数值的键值对结构,不同主流语言的实现方案如下:
Java 实现
Java中直接用Map<String, Integer>来映射amounts字段,能完美适配未知数量的键值对,主流JSON解析库(如Jackson)都支持这种映射:
import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; public class YourJsonClass { @JsonProperty("amounts") private Map<String, Integer> amounts; // 生成Getter和Setter方法 public Map<String, Integer> getAmounts() { return amounts; } public void setAmounts(Map<String, Integer> amounts) { this.amounts = amounts; } }
解析时,amounts下的所有键值对会自动填充到Map中。
Python 实现
Python里无需复杂的类定义,用字典就能直接对应,也可以用类型提示工具做约束:
普通解析方案
import json json_str = '''{ "amounts": { "a": 100, "b": 72 } }''' data = json.loads(json_str) amounts_dict = data['amounts'] # 直接得到字符串键+整数值的字典
带类型约束方案(适合大型项目)
from typing import TypedDict import json class Amounts(TypedDict): __extra_items__: str, int # 允许任意字符串键,值为int类型 class YourJsonType(TypedDict): amounts: Amounts json_str = '''{ "amounts": { "a": 100, "b": 72 } }''' data: YourJsonType = json.loads(json_str)
C# 实现
C#使用Dictionary<string, int>来对应amounts字段,System.Text.Json或Newtonsoft.Json都支持:
using System.Text.Json.Serialization; using System.Collections.Generic; public class YourJsonClass { [JsonPropertyName("amounts")] public Dictionary<string, int> Amounts { get; set; } } // 解析示例 string jsonStr = @" { ""amounts"": { ""a"": 100, ""b"": 72 } }"; YourJsonClass obj = System.Text.Json.JsonSerializer.Deserialize<YourJsonClass>(jsonStr);
内容的提问来源于stack exchange,提问作者Babiker
相关产品推荐
相关产品推荐

