如何用C# Newtonsoft.Json提取嵌套JSON中return节点的所有值?
问题解决方法
错误原因
你的代码中错误使用了数组索引[0],但目标JSON里的result、data、getEstelam3Response、return都是单个对象(用{}包裹),并非数组([]包裹),所以索引[0]会导致无法定位到对应节点,最终返回空值。
修正单个字段提取
要提取return节点下的单个字段(比如birthDate),修正后的代码如下:
var obj = JObject.Parse(responseBody); // 去掉不必要的数组索引,直接按对象层级访问 string birthDate = (string)obj.SelectToken("result.data.getEstelam3Response.return.birthDate"); Response.Write(birthDate); // 输出:13650412
提取return节点下所有键值对
如果需要获取return节点下的所有键值对,可以遍历该对象:
var obj = JObject.Parse(responseBody); JToken returnNode = obj.SelectToken("result.data.getEstelam3Response.return"); foreach (var prop in returnNode.Children<JProperty>()) { string key = prop.Name; string value; // 处理数组类型的字段(比如bookRow、deathStatus) if (prop.Value.Type == JTokenType.Array) { value = string.Join(",", prop.Value.ToObject<string[]>()); } else { value = prop.Value.ToString(); } Response.Write($"{key}: {value}<br/>"); }
额外说明
注意到name、family等字段的值是Base64编码后的内容,如果你需要还原成明文,可以用Base64解码:
string encodedName = (string)returnNode["name"]; string decodedName = Encoding.UTF8.GetString(Convert.FromBase64String(encodedName));
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

