Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Json模式验证,如果有其他条件,请放心

Json模式验证,如果有其他条件,请放心
EN

Stack Overflow用户
提问于 2022-02-20 14:16:59
回答 3查看 680关注 0票数 0

我正在与json模式的json验证作斗争,请放心。问题是,我需要使用如果在其中的其他条件,出于某种原因,我的测试总是绿色的,即使我定义了错误的条件。我使用了json 7,它应该支持“否则”,但是当我定义假条件时,我的测试应该会失败,但会有一些错误,但实际上它通过了,我可以说它根本没有检查该条件。

这是我的儿子:

代码语言:javascript
代码运行次数:0
复制
{
    "courses": [{
        "position": "1",
        "previous_course_rank": "",
        "location": "Weston, FL",
        "established": "",
        "course_name": "Weston Hills - Tour Course",
        "course_id": "056",
        "holes": [{
            "hole": "1"
        }]
    }]
}

下面是我的json模式验证,其中包含了if Here条件。正如您可以从“如果是其他条件”中看到的,我希望只使用course_id: 056建立空字符串,但在其他情况下,我希望设置为像2022年那样的年份。问题是,当我试图测试假条件,并输入如果年份模式[0-9{4}它的绿色,我不明白为什么。

代码语言:javascript
代码运行次数:0
复制
{
  "$schema": "http://json-schema.org/draft-07/schema",
  "type": "object",
  "required": [
    "courses"
  ],
  "properties": {
    "courses": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "position",
          "previous_course_rank",
          "location",
          "established",
          "course_name",
          "course_id",
          "holes"
        ],
        "properties": {
          "position": {
            "type": "string"
          },
          "previous_course_rank": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "course_name": {
            "type": "string"
          },
          "course_id": {
            "type": "string"
          },
          "holes": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "hole"
              ],
              "properties": {
                "hole": {
                  "type": "string"
                }
              }
            }
          }
        },
        "if": {
          "properties": {
            "course_id": {
              "const": "056"
            }
          }
        },
        "then": {
          "properties": {
            "established": {
              "pattern": "^$"
            }
          }
        },
        "else": {
          "properties": {
            "established": {
              "pattern": "^[0-9]{4}$"
            }
          }
        }
      }
    }
  }
}

下面是我检查json与json模式的方法。

代码语言:javascript
代码运行次数:0
复制
ValidatableResponse response = getResponse(feedUrl);

response
.body(matchesJsonSchemaInClasspath(pathToSchema))
.assertThat();
EN

回答 3

Stack Overflow用户

发布于 2022-02-20 21:14:46

"pattern": ""的意思是“匹配一切”。也许你是说"const": ""

此外,如果您想精确匹配一个四位数字,而不允许任何前导字符或尾随字符,则需要显式锚定模式:"pattern": "^[0-9]{4}$"

票数 2
EN

Stack Overflow用户

发布于 2022-02-24 13:36:41

尝试下面的模式:json模式验证器

我使用属性类型对if条件进行验证,我将类型设置为stringmaxLength为0,而对于else,我使用minimummaximum属性将type设置为number,您可以根据需要更新这些属性

代码语言:javascript
代码运行次数:0
复制
{
    "$schema": "http://json-schema.org/draft-07/schema",
    "type": "object",
    "required": [
        "courses"
    ],
    "properties": {
        "courses": {
            "type": "array",
            "items": {
                "type": "object",
                "required": [
                    "position",
                    "previous_course_rank",
                    "location",
                    "established",
                    "course_name",
                    "course_id",
                    "holes"
                ],
                "properties": {
                    "position": {
                        "type": "string"
                    },
                    "previous_course_rank": {
                        "type": "string"
                    },
                    "location": {
                        "type": "string"
                    },
                    "course_name": {
                        "type": "string"
                    },
                    "course_id": {
                        "type": "string"
                    },
                    "holes": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "required": [
                                "hole"
                            ],
                            "properties": {
                                "hole": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                },
                "if": {
                    "properties": {
                        "course_id": {
                            "const": "056"
                        }
                    }
                },
                "then": {
                    "properties": {
                        "established": {
                            "type": "string",
                            "maxLength": 0
                        }
                    }
                },
                "else": {
                    "properties": {
                        "established": {
                            "type": "number",
                            "minimum": 1900,
                            "maximum": 3000
                        }
                    }
                }
            }
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-30 04:23:14

因此,问题的根本原因是root默认情况下使用草案-03模式,他们不能支持版本草案-06和草案-07。

如果您想升级该草案版本,这就是我们所拥有的。因此,在我的理解中,如果有其他条件,我无法放心地使用。

代码语言:javascript
代码运行次数:0
复制
JsonSchemaFactory factory = JsonSchemaFactory.newBuilder()
        .setValidationConfiguration(
                ValidationConfiguration.newBuilder()
                        .setDefaultVersion(SchemaVersion.DRAFTV3)
                        .freeze()).freeze();

所以我的解决方案是使用everit模式https://github.com/everit-org/json-schema

代码语言:javascript
代码运行次数:0
复制
Schema schema = getSchema(schemaPath);

SoftAssertions softAssertions = new SoftAssertions();
try {
    schema.validate(new JSONObject(getResponseAsString(jsonEndPointUrl)));
} catch (ValidationException e) {
    collectAllAssertions(softAssertions, e);
}

softAssertions.assertAll();

也许你可以使用草案-06和草案-07与放心,随时张贴您的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71199295

复制
相关文章
[1154]如何将字符串转换为datetime
1.把datetime转成字符串: 2017-11-23 17:05:18 2.把字符串转成datetime: 2017-11-23 16:10:10 3.把字符串转成时间戳形式: 1511424610.0 4.把时间戳转成字符串形式: 2017-11-23 17:05:18 5.把datetime类型转外时间戳形式: 1511427918.0
周小董
2022/07/27
3.3K0
pandas datetime与时间戳互相转换,字符串转换datetime
to_datetime 如果传入的是10位时间戳,unit设置为秒,可以转换为datetime
lovelife110
2021/12/08
4.7K0
如何将 Python datetime.datetime 转换为 Excel 序列号?
Excel 使用一种特殊格式来存储日期和时间,称为序列号。序列号是自 1 年 1899 月 <> 日(Excel 认为是时间开始的日期)以来的天数。
很酷的站长
2023/08/11
3440
如何将 Python datetime.datetime 转换为 Excel 序列号?
将字符串转换为date类型_java字符串转date类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
14.1K0
Pandas DateTime 超强总结
对于 Pandas 来说,可以处理众多的数据类型,其中最有趣和最重要的数据类型之一就是时间序列数据。时间序列数据无处不在,它在各个行业都有很多应用。患者健康指标、股票价格变化、天气记录、经济指标、服务器、网络、传感器和应用程序性能监控都是时间序列数据的应用方向
周萝卜
2022/05/22
5.6K0
Pandas DateTime 超强总结
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.4K0
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
23.3K0
如何将Pandas数据转换为Excel文件
将数据导出到Excel文件通常是任何用户阅读和解释一组数据的最优先和最方便的方式。通过使用Pandas库,可以用Python代码将你的网络搜刮或其他收集的数据导出到Excel文件中,而且步骤非常简单。
玖柒的小窝
2021/11/01
7.6K0
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
21.2K0
Python将字符串转换为列表
We can convert a string to list in Python using split() function.
全栈程序员站长
2022/09/06
6K0
将 Pandas 换为交互式表格的 Python 库
Pandas是我们日常处理表格数据最常用的包,但是对于数据分析来说,Pandas的DataFrame还不够直观,所以今天我们将介绍4个Python包,可以将Pandas的DataFrame转换交互式表格,让我们可以直接在上面进行数据分析的操作。
用户6888863
2023/09/06
2560
将 Pandas 换为交互式表格的 Python 库
将 Pandas 换为交互式表格的 Python 库
Pivottablejs是一个通过IPython widgets集成到Python中的JavaScript库,允许用户直接从DataFrame数据创建交互式和灵活的汇总报表。可以进行高效、清晰的数据分析和表示,帮助将数据从Pandas DataFrame转换为易于观察的交互式数据透视表。
数据STUDIO
2023/09/04
2270
将 Pandas 换为交互式表格的 Python 库
将 Pandas 换为交互式表格的 Python 库
Pandas是我们日常处理表格数据最常用的包,但是对于数据分析来说,Pandas的DataFrame还不够直观,所以今天我们将介绍4个Python包,可以将Pandas的DataFrame转换交互式表格,让我们可以直接在上面进行数据分析的操作。
Python数据科学
2023/08/29
1950
将 Pandas 换为交互式表格的 Python 库
在Python如何将 JSON 转换为 Pandas DataFrame?
在数据处理和分析中,JSON是一种常见的数据格式,而Pandas DataFrame是Python中广泛使用的数据结构。将JSON数据转换为Pandas DataFrame可以方便地进行数据分析和处理。在本文中,我们将探讨如何将JSON转换为Pandas DataFrame,并介绍相关的步骤和案例。
网络技术联盟站
2023/08/03
1.2K0
在Python如何将 JSON 转换为 Pandas DataFrame?
sql server 字符串转成日期格式_sql datetime转字符串
2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
全栈程序员站长
2022/11/09
2.3K0
UTC时间格式转换为DateTime,Python
调用接口的时候传递了一个时间参数,大概就是长这样的:2020-07-22T02:26:37.329Z
SingYi
2022/07/14
2.5K0
UTC时间格式转换为DateTime,Python
JavaSE-将字符串转换为数字
提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。
程序员阿杜
2021/03/15
2.5K0
JavaSE-将字符串转换为数字
JavaSE-将字符串转换为数字
提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。
程序员阿杜
2021/04/07
2.4K0
date转换为localdatetime_java datetime
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
6000
点击加载更多

相似问题

DTS无法将datetime2转换为datetime

14

Pandas:将字符串转换为datetime.datetime

160

使用Pandas将字符串转换为datetime

17

无法使用pandas to_datetime方法将字符串转换为datetime数据类型

213

我无法将Pandas Dataframe类型转换为datetime

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文