Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#JToken.SelectTokens方法-什么JPath表达式?_C#_Json_Linq - Fatal编程技术网

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

C#JToken.SelectTokens方法-什么JPath表达式?,c#,json,linq,C#,Json,Linq,我有这样的json文本: { "course_editions": { "2014/SL": [ { "grades": { "course_units_grades": { "159715": { "1": { "value_symbol": "4", "exam_session_number": 1, "exam_id": 198172,

我有这样的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": {}
    }
  },
string json_response = GetResponse(sign(url_courses));
var courses_tokens = JObject.Parse(json_response).SelectTokens("['course_editions'].['2014/SL'].[*].['grades'].*")
我想使用命名空间中的JToken.SelectTokens方法:Newtonsoft.Json.Linq

我试过这样做:

{
"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": {}
    }
  },
string json_response = GetResponse(sign(url_courses));
var courses_tokens = JObject.Parse(json_response).SelectTokens("['course_editions'].['2014/SL'].[*].['grades'].*")
它不起作用。我只想在
课程单元分数
之后和
“1”
之前获得这些数字。因此,仅在本例中:
“159715”
“159796”
,以便能够在

foreach(var lp in courses_tokens) {
}

这是一种可能的方法:

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);
}
159715
159796
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': {}
            }
         }
      ]
   }
}";
json示例:

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

我的例子没有提供这种情况,但在
课程(单元)成绩
中可以有多个孩子,最多3个,但在这种特殊情况下我遇到了
问题。选择(o=>o.First)
,还有其他方法吗?