c# JToken.SelectTokens方法-什么JPath表达式

本文关键字:什么 JPath 表达式 方法 JToken SelectTokens | 更新日期: 2023-09-27 18:02:14

我有这样的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。从命名空间中选择token方法: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) {
}

c# JToken.SelectTokens方法-什么JPath表达式

这是一种可能的方法:

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': {}
            }
         }
      ]
   }
}";