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

如何在JSON文件中精确匹配目标字符串(避免子串误匹配)

解决JSON中精确匹配单词的问题

你的问题核心在于直接对JSON字符串使用Contains或IndexOf会匹配子串,而非精确匹配整个键或值——就像你遇到的情况,"byroots"里的"root"会被误判为匹配,但你需要的是完全等于目标单词的结果。

正确的思路是先把JSON解析成结构化对象,再遍历检查每个键和值是否精确匹配目标词。下面是具体的实现方案:

实现步骤

  1. 先安装Json.NET(Newtonsoft.Json)库:这是C#处理JSON最常用的工具,直接通过NuGet搜索Newtonsoft.Json安装即可。
  2. 将JSON字符串解析为JObject,遍历所有属性,分别检查键和值是否与目标单词精确相等(支持区分/不区分大小写)。

示例代码

using Newtonsoft.Json.Linq;
using System.IO;
using System.Linq;

// 你要搜索的目标单词
string targetWord = "root";
bool exactMatchFound = false;

using (StreamReader r = new StreamReader("filename.json"))
{
    string jsonContent = r.ReadToEnd();
    // 解析JSON为结构化对象
    JObject jsonObj = JObject.Parse(jsonContent);
    
    // 遍历所有JSON属性(包括嵌套层级的属性)
    foreach (var property in jsonObj.Descendants().OfType<JProperty>())
    {
        // 检查属性键是否精确匹配(不区分大小写,需要区分的话换成StringComparison.Ordinal)
        if (property.Name.Equals(targetWord, StringComparison.OrdinalIgnoreCase))
        {
            exactMatchFound = true;
            break;
        }
        
        // 检查属性值是否为字符串类型且精确匹配
        if (property.Value.Type == JTokenType.String && 
            property.Value.ToString().Equals(targetWord, StringComparison.OrdinalIgnoreCase))
        {
            exactMatchFound = true;
            break;
        }
    }
}

// 根据匹配结果执行后续逻辑
if (exactMatchFound)
{
    filename = path + branch + "-" + testsuite.Title + ".json";
}

为什么之前的方法无效?

直接操作JSON字符串时,Contains和IndexOf是在整个字符串中查找子串,只要目标词出现在任何位置(比如"byroots"里的"root")都会返回true,完全不符合你需要的精确匹配整个元素的要求。而解析成结构化对象后,我们可以逐个检查每个键和值的完整内容,确保只有完全相等的情况才会被判定为匹配。

如果只需要检查键或者只检查值,可以去掉对应的判断逻辑,比如只关心值的话,就删除检查属性键的代码块。

内容的提问来源于stack exchange,提问作者Abhishek K Suresh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:57