如何将API返回的JSON字符串提取邮编转为C#基础字符串数组
嘿,我来帮你搞定这个问题!从API返回的JSON里提取邮编转成C#字符串数组其实不难,可能是你在解析JSON的时候踩了一些常见的小坑。我给你梳理两种最常用的实现方式,覆盖大部分场景:
先看个示例JSON(假设你的API返回结构类似这样)
{ "地址列表": [ { "街道": "主街123号", "邮编": "90210" }, { "街道": "榆树大道456号", "邮编": "10001" }, { "街道": "橡树路789号", "邮编": "60601" } ] }
方式一:强类型模型解析(推荐,类型安全)
这种方式适合JSON结构固定的场景,通过定义匹配的模型类来解析,不容易出错。
用.NET内置的System.Text.Json(.NET Core/.NET5+可用)
// 定义和JSON结构对应的模型类 public class 地址 { // 用JsonPropertyName属性匹配JSON里的键(解决大小写/命名不一致问题) [JsonPropertyName("邮编")] public string 邮编 { get; set; } } public class 根对象 { [JsonPropertyName("地址列表")] public List<地址> 地址列表 { get; set; } } // 核心解析逻辑 string api返回的Json = /* 你的API返回字符串 */; var 解析结果 = JsonSerializer.Deserialize<根对象>(api返回的Json); // 提取邮编转成字符串数组,同时处理可能的null值 string[] 邮编数组 = 解析结果.地址列表.Select(addr => addr.邮编 ?? string.Empty).ToArray();
用Newtonsoft.Json(很多.NET Framework项目常用)
// 模型类类似,只是用JsonProperty属性映射 public class 地址 { [JsonProperty("邮编")] public string 邮编 { get; set; } } public class 根对象 { [JsonProperty("地址列表")] public List<地址> 地址列表 { get; set; } } // 解析逻辑 var 解析结果 = JsonConvert.DeserializeObject<根对象>(api返回的Json); string[] 邮编数组 = 解析结果.地址列表.Select(addr => addr.邮编 ?? string.Empty).ToArray();
方式二:动态解析(不想写模型的时候用)
如果JSON结构不固定或者只是临时用,可以直接动态解析JSON节点:
System.Text.Json版本
string api返回的Json = /* 你的JSON字符串 */; using JsonDocument doc = JsonDocument.Parse(api返回的Json); JsonElement 根元素 = doc.RootElement; JsonElement 地址数组 = 根元素.GetProperty("地址列表"); List<string> 邮编列表 = new List<string>(); foreach (JsonElement addr in 地址数组.EnumerateArray()) { // 安全获取邮编,避免空值报错 string 邮编 = addr.GetProperty("邮编").GetString() ?? string.Empty; 邮编列表.Add(邮编); } string[] 邮编数组 = 邮编列表.ToArray();
Newtonsoft.Json版本
string api返回的Json = /* 你的JSON字符串 */; JObject 解析对象 = JObject.Parse(api返回的Json); string[] 邮编数组 = 解析对象["地址列表"] .Select(addr => addr["邮编"]?.ToString() ?? string.Empty) .ToArray();
容易踩的几个坑
- 大小写敏感:JSON里的键是
邮编,模型里不能随便写成ZipCode,必须用属性映射或者完全一致; - 路径错误:如果你的API直接返回邮编数组(比如
["90210", "10001"]),那直接反序列化成数组就行:string[] 邮编数组 = JsonSerializer.Deserialize<string[]>(api返回的Json);; - 空值处理:如果有些条目没有邮编,一定要加
?? string.Empty这类判断,避免空引用异常; - 库版本问题:
System.Text.Json是.NET Core之后才内置的,如果你用的是.NET Framework,建议用Newtonsoft.Json。
内容的提问来源于stack exchange,提问作者dmikester1
相关产品推荐
相关产品推荐

