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

如何在C#中测试一个JSON是否包含另一个JSON?

验证JSON包含性(Json2包含Json1)的测试方法(无需自行实现逻辑)

先明确测试需求:确认Json2包含Json1的所有字段(包括嵌套字段)且对应值完全一致,忽略Json2的额外字段,以此验证版本无变更。

示例JSON

Json1:

{
  "a": 1,
  "b": {
    "b1": 21
  }
}

Json2:

{
  "a": 1,
  "b": {
    "b1": 21,
    "b2": 22
  },
  "c": 3
}

具体实现方法

1. 用JSON Schema校验

把Json1转换成精确匹配值的JSON Schema,再用Schema校验Json2。只要Json2满足Schema定义的所有字段要求(值完全匹配、必填字段存在),就说明Json2包含Json1。

以Python的jsonschema库为例:

from jsonschema import validate

json1 = {"a": 1, "b": {"b1": 21}}
json2 = {"a": 1, "b": {"b1": 21, "b2": 22}, "c": 3}

# 构造匹配Json1的Schema,用const指定精确值
match_schema = {
    "type": "object",
    "properties": {
        "a": {"const": json1["a"]},
        "b": {
            "type": "object",
            "properties": {
                "b1": {"const": json1["b"]["b1"]}
            },
            "required": ["b1"]
        }
    },
    "required": ["a", "b"]
}

# 校验,无报错则说明Json2符合要求
validate(instance=json2, schema=match_schema)

2. 用语言专属的JSON对比库

很多成熟的工具库直接支持"子集匹配",不用自己写递归逻辑:

  • JavaScript/TypeScript:用lodash的isMatch方法,直接检查Json2是否包含Json1的所有属性和值:
    const _ = require('lodash');
    const json1 = {"a": 1, "b": {"b1": 21}};
    const json2 = {"a": 1, "b": {"b1": 21, "b2": 22}, "c": 3};
    console.log(_.isMatch(json2, json1)); // 输出 true
    
  • Java:用JSONAssert库,开启LENIENT模式,允许Json2有额外字段:
    import org.skyscreamer.jsonassert.JSONAssert;
    import org.skyscreamer.jsonassert.JSONCompareMode;
    
    public class JsonInclusionTest {
        public static void main(String[] args) throws Exception {
            String json1 = "{\"a\":1,\"b\":{\"b1\":21}}";
            String json2 = "{\"a\":1,\"b\":{\"b1\":21,\"b2\":22},\"c\":3}";
            // 无异常抛出则验证通过
            JSONAssert.assertEquals(json1, json2, JSONCompareMode.LENIENT);
        }
    }
    
  • Python:用deepdiff库,检查Json1的所有字段在Json2中值完全匹配,忽略新增字段:
    from deepdiff import DeepDiff
    
    json1 = {"a": 1, "b": {"b1": 21}}
    json2 = {"a": 1, "b": {"b1": 21, "b2": 22}, "c": 3}
    
    # 只检查Json1有的字段,忽略Json2新增的内容
    diff = DeepDiff(json1, json2, ignore_order=True, exclude_paths=["root.c", "root.b.b2"])
    if not diff:
        print("Json2包含Json1的所有字段且值匹配")
    

3. 命令行工具(jq)

用jq编写表达式直接验证,适合快速测试:

# 假设json1.json和json2.json是保存两个JSON的文件
jq -n --argfile a json1.json --argfile b json2.json '$b | .a == $a.a and .b.b1 == $a.b.b1'

运行后输出true则说明符合要求。如果是复杂嵌套结构,可以写递归的jq表达式来批量检查所有字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:57:41