如何使用LINQ从嵌套JSON数据中提取指定的fareAvailabilityKey值?
问题描述
嵌套JSON数据
var json = { "data": { "results": "abc", "faresAvailable": { "thamil-": { "totals": 1, "isSumOfSector": false, "fareAvailabilityKey": "MH5UM35_UVB_VDNPN1pCSVh_MTAwN35_MTl_MX5OQk9NTUFBMDE5MDAxMH5YITA-", "fares": "idk" }, "rocky-": { "totals": 2, "isSumOfSector": false, "fareAvailabilityKey": "MH5UN35_UVB_VDdPN1pCSVh_MTAwN35_MTl_MX5OQk9NTUFBMDE5MDAxMH5YITE-", "fares": "idk too" } }, "currencyCode": "INR", "includeTaxesAndFees": true, "bundleOffers": null } };
尝试的LINQ查询
var A = from a in json[data] select new { fareAvailabilityKey = json["faresAvailable"].Values().Select(a => a["fareAvailabilityKey"].ToString()) };
期望输出
fareAvailabilityKey MH5UM35_UVB_VDNPN1pCSVh_MTAwN35_MTl_MX5OQk9NTUFBMDE5MDAxMH5YITA- MH5UN35_UVB_VDdPN1pCSVh_MTAwN35_MTl_MX5OQk9NTUFBMDE5MDAxMH5YITE-
修正后的查询及说明
错误分析
原查询存在两处核心问题:
from a in json[data]语法错误,且遍历json["data"]无意义,我们需要的是遍历faresAvailable下的子对象- 原查询将所有
fareAvailabilityKey打包成一个集合作为单个对象的属性,而非生成每个键对应的独立条目
修正代码(基于Newtonsoft.Json)
方式1:直接获取所有键的字符串列表
var fareKeys = json["data"]["faresAvailable"] .Values<JObject>() .Select(item => item["fareAvailabilityKey"].ToString()) .ToList();
方式2:生成包含属性的匿名对象集合(匹配期望输出结构)
var result = json["data"]["faresAvailable"] .Values<JObject>() .Select(item => new { fareAvailabilityKey = item["fareAvailabilityKey"].ToString() });
说明
json["data"]["faresAvailable"]定位到嵌套的 faresAvailable 对象.Values<JObject>()获取该对象下的所有子对象(即"thamil-"和"rocky-"对应的内容).Select(...)从每个子对象中提取fareAvailabilityKey的字符串值
内容的提问来源于stack exchange,提问作者Rocky
相关产品推荐
相关产品推荐

