基于以下经过验证的JSON:
{
"GrowthRates": [{
"FinancialStatementHeader": {
"TimePeriodText": {
"attrCodeValue": 11096,
"txt": "Between 0 and 12 months"
}
},
"ComparedToFinancialStatementHeader": {
"TimePeriodText": {
"attrCodeValue": 13711,
"txt": "1-3 years"
}
},
"GrowthRateItem": [{
"ItemDescriptionText": {
"attrCodeValue": 6240,
"txt": "Total number of employees"
},
"ItemRate": 0
},
{
"ItemDescriptionText": {
"attrCodeValue": 3110,
"txt": "Sales Revenue"
},
"ItemRate": 0
}
]
},
{
"FinancialStatementHeader": {
"TimePeriodText": {
"attrCodeValue": 11096,
"txt": "Between 0 and 12 months"
}
},
"ComparedToFinancialStatementHeader": {
"TimePeriodText": {
"attrCodeValue": 13721,
"txt": "1-5 years"
}
},
"GrowthRateItem": [{
"ItemDescriptionText": {
"attrCodeValue": 6240,
"txt": "Total number of employees"
},
"ItemRate": 0
},
{
"ItemDescriptionText": {
"attrCodeValue": 3110,
"txt": "Sales Revenue"
},
"ItemRate": 0
}
]
}
]
}
我需要以字符串形式检索ItemRate值,其中GrowthRates数组属性["ComparedToFinancialStatementHeader"]["TimePeriodText"]["txt"]
在这种情况下为“ 1-3年”或“ 1-5年”,而{ 1}}数组属性GrowthRateItem
的值在这种情况下也是“员工总数”或“销售收入”的指定值。
LINQ to JSON查询只需要实现上面列出的四个值所隐含的四种情况中的一种。
我无法扩展用于解决类似问题的以下解决方案。
LINQ查询基于外部数组中的两个属性值检索内部数组值。
["ItemDescriptionText"]["txt"]
JSON字符串:
JToken jsonTkn = JToken.Parse(jsonString);
string jsonValue = jsonTkn["IndustryCode"]
.Where(icItem => icItem["attrTypeText"].Value<string>() == "NAICS" && icItem["DisplaySequence"].Value<string>() == "1")
.Select(icItem => icItem["IndustryCodeDescription"].First()["txt"].Value<string>())
.First().ToString().ToUpper();
我列出了以上解决方案,以显示试图解决提出的问题的结构。
答案 0 :(得分:0)
这样的事情怎么样?
public static string GetItemRate(JObject obj, string timePeriodText, string itemDescriptionText)
{
return obj.SelectToken("GrowthRates")
.First(jo => (string)jo.SelectToken("ComparedToFinancialStatementHeader.TimePeriodText.txt") == timePeriodText)
.SelectToken("GrowthRateItem")
.First(jo => (string)jo.SelectToken("ItemDescriptionText.txt") == itemDescriptionText)
.SelectToken("ItemRate")
.Value<string>();
}
然后像这样使用它:
JObject obj = JObject.Parse(jsonString);
string rate = GetItemRate(obj, "1-3 years", "Sales Revenue");