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

标签 c# json linq

我有这样的 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) {
}

最佳答案

这是一种可能的方式:

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

关于C# JToken.SelectTokens 方法 - 什么 JPath 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31367434/

相关文章:

c# - 为什么 DwmGetWindowAttribute 与 DWMWA_EXTENDED_FRAME_BOUNDS 在切换监视器时表现异常?

c# - 如何获取导致异常的方法的名称

c# - 将字符串或字符转换为整数

Javascript 构造函数 - 返回 JSON 对象的效果

javascript - ReactJS/Javascript - 对象中项目的问题渲染组件

linq - LINQ2SQL 是否使用表索引?

c# - 从 Linqkit 获取 SQL 字符串

c# - 在 mysql/python 或 mysql/.net 中按子字符串对字符串进行分组

json - 在 Swift 中解析 JSON 时为 nil

linq - t4 模板 linq 问题