На основе утвержденного 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 лет», а массив GrowthRateItem
свойство, ["ItemDescriptionText"]["txt"]
, значение также является указанным значением в данном случае «Общее количество сотрудников» или «Доход от продаж».
Запрос LINQ to JSON должен реализовывать только один случай из четырех случаев, подразумеваемых четырьмя значениями, перечисленными выше.
Мне не удалось расширить следующее решение, используемое для решения аналогичной проблемы.
LINQ Запрос для извлечения значения внутреннего массива на основе двух значений свойств из внешнего массива.
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();
Строка JSON:
{
"IndustryCode": [{
"attrCodeValue": 25838,
"attrTypeText": "DBH Industry Code",
"IndustryCode": {
"txt": "1063"
},
"IndustryCodeDescription": [{
"attrLanguageCode": 39,
"attrIndustryCodeDescriptionLengthCode": 9120,
"txt": "Legal Services"
}],
"DisplaySequence": 1
},
{
"attrCodeValue": 700,
"attrTypeText": "NAICS",
"IndustryCode": {
"txt": "541110"
},
"IndustryCodeDescription": [{
"attrLanguageCode": 39,
"attrIndustryCodeDescriptionLengthCode": 9120,
"txt": "Offices of Lawyers"
}],
"DisplaySequence": 1
},
{
"attrCodeValue": 24664,
"attrTypeText": "North American Industry Classification System 2012",
"IndustryCode": {
"txt": "541110"
},
"IndustryCodeDescription": [{
"attrLanguageCode": 39,
"attrIndustryCodeDescriptionLengthCode": 9120,
"txt": "Offices of Lawyers"
}],
"DisplaySequence": 1
},
{
"attrCodeValue": 21182,
"attrTypeText": "UK SIC 2003",
"IndustryCode": {
"txt": "74.110"
},
"IndustryCodeDescription": [{
"attrLanguageCode": 39,
"attrIndustryCodeDescriptionLengthCode": 9120,
"txt": "Legal activities"
}],
"DisplaySequence": 1
},
{
"attrCodeValue": 3599,
"attrTypeText": "DBS Industry Code",
"IndustryCode": {
"txt": "81119901"
},
"IndustryCodeDescription": [{
"attrLanguageCode": 39,
"attrIndustryCodeDescriptionLengthCode": 2121,
"txt": "GENRL PRACTICE ATTY"
}],
"DisplaySequence": 1
},
{
"attrCodeValue": 399,
"attrTypeText": "US Standard Industry Code 1987 - 4 digit",
"IndustryCode": {
"txt": "8111"
},
"IndustryCodeDescription": [{
"attrLanguageCode": 39,
"attrIndustryCodeDescriptionLengthCode": 1441,
"txt": "Legal services office"
}],
"DisplaySequence": 1
}
]
}
Я перечислил вышеупомянутое решение, чтобы показать структуру, в которой я пытаюсь решить поставленный вопрос.