You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JsonPath.net中结合search()函数与其他布尔条件过滤JSON数组?

解决方案

针对你使用System.Text.Json.Nodes + JsonPath.NET的场景,要实现多条件组合过滤,只需将两个条件通过**逻辑与运算符&&**组合在JSON Path的过滤表达式中即可。以下是具体实现方式:

正确的JSON Path表达式

$[?(search(@["TO Axis"][0].value, "^(Z|MX)$") && @["Action"][0].value in ["Home", "Move"])]

表达式拆解

  • search(@["TO Axis"][0].value, "^(Z|MX)$"):调用JsonPath.NET的search()正则匹配函数,验证"TO Axis"数组第一个元素的value是否完全匹配Z或MX(正则^(Z|MX)$确保精确匹配)
  • @["Action"][0].value in ["Home", "Move"]:使用in运算符,验证"Action"数组第一个元素的value是Home或Move中的任意一个
  • &&:逻辑与运算符,确保两个条件同时满足

C#代码示例

using System.Text.Json.Nodes;
using JsonPath.Net;

// 示例JSON数组
string json = @"[
    {
        ""TO Axis"": [{ ""value"": ""Z"" }],
        ""Action"": [{ ""value"": ""Home"" }]
    },
    {
        ""TO Axis"": [{ ""value"": ""MX"" }],
        ""Action"": [{ ""value"": ""Move"" }]
    },
    {
        ""TO Axis"": [{ ""value"": ""X"" }],
        ""Action"": [{ ""value"": ""Home"" }]
    },
    {
        ""TO Axis"": [{ ""value"": ""Z"" }],
        ""Action"": [{ ""value"": ""Stop"" }]
    }
]";

// 加载为JsonNode
JsonNode root = JsonNode.Parse(json)!;

// 执行JSON Path查询
JsonNode[] results = JsonPath.Query(root, @"$[?(search(@[""TO Axis""][0].value, ""^(Z|MX)$"") && @[""Action""][0].value in [""Home"", ""Move""])")
    .OfType<JsonNode>()
    .ToArray();

// 输出匹配结果
foreach (var node in results)
{
    Console.WriteLine(node.ToJsonString());
}

关键注意事项

  1. 带空格的属性名必须用@["属性名"]的形式访问,不能直接写@.TO Axis
  2. 正则表达式需用^和$锚定,避免部分匹配导致的结果偏差
  3. 多条件组合时,所有条件需包裹在[?(...)]的过滤括号内,用逻辑运算符(&&/||)连接

内容的提问来源于stack exchange,提问作者Cliff Pennalligen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:22:34