C# JToken.Метод SelectTokens-какое выражение JPath?

у меня есть текст json, как это:

{
"course_editions": {
"2014/SL": [
  {
    "grades": {
      "course_units_grades": {
        "159715": {
          "1": {
            "value_symbol": "4",
            "exam_session_number": 1,
            "exam_id": 198172,
            "value_description": {
              "en": "good",
            }
          }
        }
      },
      "course_grades": {}
    }
  },
  {
    "grades": {
      "course_units_grades": {
        "159796": {
          "1": {
            "value_symbol": "5",
            "exam_session_number": 1,
            "exam_id": 198259,
            "value_description": {
              "en": "very good",
            }
          }
        }
      },
      "course_grades": {}
    }
  },

Я хотел бы использовать JToken.Метод SelectTokens из пространства имен: Newtonsoft.формат JSON.В LINQ

Я пробовал так:

string json_response = GetResponse(sign(url_courses));
var courses_tokens = JObject.Parse(json_response).SelectTokens("['course_editions'].['2014/SL'].[*].['grades'].*")

это не работает. Я хотел бы получить только эти цифры после course_unit_grades и перед "1". Поэтому в этом примере только:"159715" и "159796" чтобы иметь возможность использовать их все, один за другим в

foreach(var lp in courses_tokens) {
}

1 ответов


Это один из возможных путей :

var jobj = JObject.Parse(json);
var coursesTokens = jobj.SelectTokens("course_editions.2014/SL[*].grades.course_units_grades")
                        .Select(o => o.First) //get the first child of `course_units_grades`
                        .Cast<JProperty>() //cast to JProperty
                        .Select(o => o.Name); //get the name of the property
foreach (string coursesToken in coursesTokens)
{
    Console.WriteLine(coursesToken);
}

Dotnetfiddle Demo

учитывая образец json внизу, вывод выглядит следующим образом:

159715
159796

образец json:

var json = @"{
   'course_editions': {
      '2014/SL': [
         {
            'grades': {
               'course_units_grades': {
                  '159715': {
                     '1': {
                        'value_symbol': '4',
                        'exam_session_number': 1,
                        'exam_id': 198172,
                        'value_description': {
                           'en': 'good'
                        }
                     }
                  }
               },
               'course_grades': {}
            }
         },
         {
            'grades': {
               'course_units_grades': {
                  '159796': {
                     '1': {
                        'value_symbol': '5',
                        'exam_session_number': 1,
                        'exam_id': 198259,
                        'value_description': {
                           'en': 'very good'
                        }
                     }
                  }
               },
               'course_grades': {}
            }
         }
      ]
   }
}";