c# - 使用 Json.Net 查询带有过滤器的 Json

标签 c# json json.net

在 C# 中,我使用 Json.net 尝试检索“buttonPress”的总和,其中“minutesStreamed”超过 60。

string json = @"
{
    'results': [
    {
        'buttonPress': 8,
        'minutesStreamed': 83
    },
    {
        'buttonPress': 3,
        'minutesStreamed': 4
    },
    {
        'buttonPress': 7,
        'minutesStreamed': 61
    }
        ]
    }";

我这样做(如下),它检索了整个列的总和,但我找不到一种方法来过滤掉 minutesStreamed > 60 的任何内容。

JObject obj = JObject.Parse(json);
var buttonPresses=
    from p in obj["results"]
    select (int)p["buttonPress"];

int sum = buttonPresses.Sum();

如果它正常工作,所需的输出将是 15。

这可能吗?

最佳答案

如果您使用的是 Json.NET,您可以使用 Linq-to-JSON 执行此操作像这样

var jsonString = File.ReadAllText(@"C:\YourDirectory\results.json");
var jObj = JObject.Parse(jsonString);

var sum = jObj["results"]
            .Where(r => (int)r["minutesStreamed"] > 60)
            .Select(r => (int)r["buttonPress"])
            .Sum();

另外,请注意您的 JSON 格式不正确,您需要像这样用逗号 , 分隔对象的属性

{
    'buttonPress': 8, <= this
    'minutesStreamed': 83
}

关于c# - 使用 Json.Net 查询带有过滤器的 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629643/

相关文章:

c# - 在 WCF 回调中收到的消息乱序

json - Jolt - 将值从一个数组复制到另一个数组并更改键

java - 如何使用json节点解析json数组值

json - 如何使用 LINQ 查询此 JSON 字符串?

C#如何对背景渐变进行base64编码

c# - ODAC 12c 和 Entity Framework 6

c# - c#中SQL时间戳的等效类型是什么

json - 访问 DeepL 替代翻译

c# - 如何使用 JSON.NET 将带有空值的 json 数组反序列化为不可空的 int 列表?

c# - 使用 JSON.NET 序列化以下 JSON 数据