如何使用JSONPath从JSON中提取拼接后的地址值?
解决JSON数组属性拼接为完整地址列表的问题
问题分析
你当前使用的JSONPath表达式quoteSummary.result..['address1','city']会递归提取所有匹配的单个属性值,因此得到的是扁平的字符串列表,而非按对象分组拼接后的完整地址。Json.NET的JSONPath不支持直接在表达式中进行字符串拼接操作,需要通过LINQ配合节点选择来实现需求。
解决方案
方法一:通过SelectTokens获取对象后拼接
先定位到result数组中的每个对象,再逐个拼接address1和city属性:
var jsonString = @"{ ""quoteSummary"": { ""result"": [ { ""address1"": ""One Apple Park Way"", ""city"": ""Cupertino"" }, { ""address1"": ""Microsoft"", ""city"": ""New York"" } ] } }"; var data = (JObject)JsonConvert.DeserializeObject(jsonString); // 获取result数组中的所有对象节点 var addressItems = data.SelectTokens("quoteSummary.result[*]"); // 拼接每个对象的address1和city var fullAddresses = addressItems .Select(item => $"{item["address1"]} , {item["city"]}") .ToList();
方法二:直接遍历JSON数组节点
更简洁的方式是直接访问result数组,遍历后拼接属性:
var jsonString = @"{ ""quoteSummary"": { ""result"": [ { ""address1"": ""One Apple Park Way"", ""city"": ""Cupertino"" }, { ""address1"": ""Microsoft"", ""city"": ""New York"" } ] } }"; var data = (JObject)JsonConvert.DeserializeObject(jsonString); var fullAddresses = data["quoteSummary"]["result"] .Select(jToken => $"{jToken["address1"]} , {jToken["city"]}") .ToList();
注意事项
你提供的原始JSON输入中属性名为address,但代码中使用的是address1,请根据实际JSON结构调整属性名,避免因名称不匹配导致无法获取值。
内容的提问来源于stack exchange,提问作者pankaj agarwal
相关产品推荐
相关产品推荐

