JSON.NET 使用 linq 选择数组中的项目

标签 json linq json.net

我需要从 json 响应中选择一些值。我使用 json.net,可以使用更简单的东西,但似乎没有太多关于除此之外的内容的文档/教程。在下面的 json 示例中,我需要选择所有年龄:

{
"teacherHolder": [{
    "id": 200000001,
    "name": "Mr Test",
    "class": "a4",
    "students": [{
        "id": "100532469",
        "name": "ben"
    },
    {
        "id": "100506025",
        "name": "bill"
    },
    {
        "id": "100000447",
        "name": "bob"
    }]

}]

}

我尝试过这个和其他变体:

var stuff = response["teacherHolder"].Children()["students"];

var names = from y in stuff.Children().Values()
                    select y["name"];

还有这个:

var names= response["teacherHolder"]
            .Select(s => (string)s.SelectToken("students[0].name")).ToList();

响应是来自网络请求的 JObject。 我刚刚得到这个:

[{"Key":"Newtonsoft.Json.Linq.JEnumerable`1[Newtonsoft.Json.Linq.JToken]","Value":"Newtonsoft.Json.Linq.JEnumerable`1[Newtonsoft.Json.Linq.JToken]"}]

结果最终被放入字典中。

知道如何做到这一点吗?我知道这很简单,我只是还没有找到正确的组合。

最佳答案

如果你想获取所有老师的所有学生的姓名,你可以这样做:

var students = response["teacherHolder"].Children()["students"];

var names = students.Children()["name"];

或者,作为另一种选择:

var names = from teacher in response["teacherHolder"]
            from student in teacher["students"]
            select student["name"];

如果您希望它们为 IEnumerable<string> ,只需添加 Value<string>()select 的末尾。或添加Values<string>() ,如果您选择第一个选项。

但通常最好为您的对象模型创建类型,以便您可以像处理普通对象一样使用它们,而不是像某些特殊的 JSON 对象一样使用它们。

如果你有这个,你可以这样做:

var names = from teacher in response.TeacherHolder
            from student in teacher.Students
            select student.Name;

关于JSON.NET 使用 linq 选择数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9984337/

相关文章:

c# - ICollection<T> 使用 LINQ 计算每小时平均值

c# - LINQ字典到锯齿状数组?

c# - Entity Framework - 将表的列名作为字符串数组

asp.net - 连接到 PostgreSql 的 Web 服务

serialization - JSON.Net 引用变为空

java - 使用 Spring 获取 RESTful Web 服务来理解 JSON 字符串

python - 使用 request() 发布数据时出现异常 "A JSONObject text must begin with ' {' at character 0 of"

c# - Newtonsoft.Json FormatterAssemblyStyle=Simple 在反序列化时仍然需要程序集名称中的 Version

mysql - mySQL 之后无法从 JSON 获取值

json - 如何使用 swiftJson 和 Alamofire 解析 json 数据