Найти подэлемент в объекте задания с неизвестным именем свойства

#c# #json

#c# #json

Вопрос:

У меня есть следующая Json-структура, преобразованная в JObject:

 {
  "success": false,  
  "errors": {
    "13": {    
      "errorCode": "address missing"
     },
    "4711": {
      "year":1395
    }
  }
}
 

Я хочу получить значение «ErrorCode». Проблема в том, что дочерним элементом в разделе «ошибки» может быть ЛЮБОЕ число, поэтому я не могу просто использовать

jsonDetail.SelectToken("errors.13.errorCode")

чтобы получить значение в разделе «Код ошибки».

Всегда есть только ОДИН дочерний элемент, содержащий «Код ошибки», но могут быть и дополнительные дочерние элементы (которые я хочу игнорировать)-

Комментарии:

1. SelectToken с помощью JSONPath

Ответ №1:

Вы можете выполнить поиск по JObject выражению using SelectToken и JSONPath https://www.newtonsoft.com/json/help/html/SelectToken.htm

В вашем случае вам просто нужно это

 var errorCode = jsonDetail.SelectToken("$..errorCode");
 

Вы можете найти более подробную информацию о выражениях JSONPath здесь https://goessner.net/articles/JsonPath / (эта ссылка была найдена в собственной документации Newtonsoft)

Из документации по JSONPath вы можете видеть, что $ это для корневого объекта, а .. это рекурсивный спуск, поэтому это приведет к рекурсивному поиску корневого объекта для дочернего объекта с именем токена errorCode