2019独角兽企业重金招聘Python工程师标准>>>

  1. 此包的主要用途:

  2. Parser: Parse JSON text files and convert these to a Java model.

  3. Renderer: Render a Java representation into text.

  4. Serializer: Serialize plain POJO clusters to a JSON representation. The goal is to provide a serializing mechanism which can cope with all kinds of Java datastructures (recursion, references, primitive types, ...) .

  5. Mapper: Map POJO to JSON, this time the JSON text should be as clean as possible. This tool is the best choice when data has to be communicated between Java and other programming languages who can parse JSON.

  6. Validator: Validate the contents of a JSON file using a JSON schema.

以下来介绍一下Validator的使用
1.可以查看jsontools-core-1.7-sources.jar文件中的源代码validator-validator.json,这里介绍了json schema验证文件的写法。
(1)name:规则名称
(2)type:验证的类型,包括let、and、or、array、properties、ref、content、string、number、bool等
(3)let类型:
*后指定的是let所执行的验证规则,通常这是验证文件中的最外层元素,并告诉当验证执行时,执行的是哪个规则;
rules是一个数组,里面存放所定义的规则
(4)and类型:
rules后指定的是一个数组,内是几个规则,它们之间是and的关系
(5)or类型:
rules后指定的是一个数组,内是几个规则,它们之间是or的关系
(6)array类型:
代表数组
(7)properties类型:
pairs后指定的是一个数组,其内可以指定属性;key指定属性名,optional指定属性是否可选,rule指定属性的规则
(8)ref类型:
可以引用文件中定义的规则;
*后可以指定引用的规则名称
(9)content类型:
内容类型;
rule后可以指定content的规则
(10)string类型:
代表字符串
(11)number类型:
代表数字
(12)bool类型:
代表布尔值

另外,还有其他的规则类型,可以分析com.sdicons.json.validator包,来得知其中的含义。

2.简单模式
假设json格式为:
{
"links":[{"text":"文本","url":"链接"},{"text":"文本","url":"链接"}]
}

则相应的json schema为:
{
"name":"links-validator",
"type":"let",
"*":"links-rule",
"rules":
[
{
  "name":"link-rule",
  "type":"properties",
  "pairs":[
    {"key":"text","optional":false,"rule":{"type":"string"}},
    {"key":"url","optional":false,"rule":{"type":"string"}}
  ]
}
,
{
  "name":"links-rule",
  "type":"properties",
  "pairs":[
    {"key":"links","optional":false,"rule":{
      "type":"and",
      "rules":[
        {"type":"array"},
        {"type":"content","rule":{"type":"ref","*":"link-rule"}}
      ]
     }
    }
  ]
}
]
}

3.复杂模式
假设json格式为:
{
"actors":[{"text":"文字","url":"链接"},{"text":"文字","url":"链接"}],
"targets":[{"text":"文字","url":"链接"},{"text":"文字","url":"链接"}],
"resources":[{"text":"文字","url":"链接"},{"text":"文字"},{"text":"文字","url":"链接","src":"图片路径"}],
"props":[{"key":"key1","value":"value1"},{"key":"key2","value":"value2"}]
}

则相应的json schema为:
{
"name":"body-validator",
"type":"let",
"*":"body-rule",
"rules":
[
{
  "name":"link-rule",
  "type":"properties",
  "pairs":[
    {"key":"text","optional":false,"rule":{"type":"string"}},
    {"key":"url","optional":false,"rule":{"type":"string"}}
  ]
}
,
{
  "name":"msg-rule",
  "type":"properties",
  "pairs":[
    {"key":"text","optional":false,"rule":{"type":"string"}}
  ]
}
,
{
  "name":"image-rule",
  "type":"properties",
  "pairs":[
    {"key":"text","optional":false,"rule":{"type":"string"}},
    {"key":"url","optional":false,"rule":{"type":"string"}},
    {"key":"src","optional":false,"rule":{"type":"string"}}
  ]
}
,
{
  "name":"actor-rule",
  "type":"and",
  "rules":[
    {"type":"array"},
    {"type":"content","rule":{"type":"ref","*":"link-rule"}}
  ]
}
,
{
  "name":"target-rule",
  "type":"and",
  "rules":[
    {"type":"array"},
    {"type":"content","rule":{"type":"ref","*":"link-rule"}}
  ]
}
,
{
  "name":"res-rule",
  "type":"and",
  "rules":[
    {"type":"array"},
    {"type":"properties",
      "pairs":[
       {"key":"key","optional":false,"rule":{"type":"string"}},
       {"key":"value","optional":false,"rule":{"type":"string"}}
      ]
    }
   ]
}
,
{
  "name":"prop-rule",
  "type":"and",
  "rules":[
    {"type":"array"},
    {"type":"content","rule":{
      "type":"or",
      "rules":[
        {"type":"ref","*":"link-rule"},
        {"type":"ref","*":"msg-rule"},
        {"type":"ref","*":"image-rule"}
      ]
}
,
{
  "name":"body-rule",
  "type":"properties",
  "pairs":[
    {"key":"actors","optional":false,"rule":{"type":"ref","*":"actor-rule"}},
    {"key":"targets","optional":false,"rule":{"type":"ref","*":"target-rule"}},
    {"key":"resources","optional":false,"rule":{"type":"ref","*":"res-rule"}},
    {"key":"props","optional":false,"rule":{"type":"ref","*":"prop-rule"}}
  ]
}
]
}

以下是验证的java代码:

public JSONObject getJsonSchema() {
    try {
            InputStream is = getClass().getResourceAsStream("/schema.json");
            JSONParser parser = new JSONParser(is);
            JSONValue value = parser.nextValue();
            JSONObject obj = (JSONObject)value;
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
}

public static boolean validateJson(String json) {
        try {
            Reader reader = new StringReader(json);
            JSONParser parser = new JSONParser(reader);
            JSONValue value = parser.nextValue();
            JSONObject obj = getJsonSchema();
            JSONValidator validator = new JSONValidator(obj);
            validator.validate(value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

:cry:  :cry:
推荐一个JSON格式化工具,JSON校验工具, JSON格式化  地址是  http://www.sojson.com
无广告加载快的工具

转载于:https://my.oschina.net/tomeili/blog/186418

JSONTools Validator的使用相关推荐

  1. 工具库 --- Validator (JS正则)

    工具库 --- Validator 今天写的是一个正则验证类 单例模式 工具库地址:github.com/WeForStudy/- npm地址:www.npmjs.com/package/slm- 单 ...

  2. java requiredstringvalidator_如何访问自定义组件中的Validator.required

    我需要一些帮助 . 我正在尝试创建一个包装下拉值的自定义组件,并根据是否需要显示/隐藏默认的--Select--选项 . (我想稍后将其他自定义逻辑应用于此组件) 如何通过父级的被动形式设置我的自定义 ...

  3. SpringMVC之使用Validator接口进行验证

    对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...

  4. Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'XXX'.

    Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'XXX'. 把J ...

  5. validator的Symbol Coverage没有100%

    2019独角兽企业重金招聘Python工程师标准>>> 在help文档中有说明.之所以覆盖率无法到达100%,是因为validator用来测试的默认变量值很简陋.系统的有些分支并没有 ...

  6. Go 语言编程 — validator 数据校验工具

    目录 文章目录 目录 Validator Quick start 约束类型 特殊约束 格式约束 数据结构类型约束 范围约束 字符串约束 唯一性约束 跨字段约束 自定义约束 错误处理 中文错误信息 参考 ...

  7. php validator,实用的PHP验证器类Validator

    使用composer安装 提供非常方便的composer安装: composer require particle/validator 使用 在使用之前请确保在项目中引入了 vendor/autolo ...

  8. Validator(二)自定义

    DataVerify.mxml <?xml version="1.0"?> <mx:Application xmlns:mx="http://www.a ...

  9. springboot使用hibernate validator校验

    回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...

最新文章

  1. spring:《spring实战》读后感二
  2. BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)
  3. 客户端和服务器不支持一般 ssl 协议版本或加密套件。_恶意软件加密通信概要分析...
  4. Programming Protocol-independent Packet Processors (P4)
  5. 面向对象的三大特征之一继承
  6. CentOS7.2安装Oracle12.1.0.2
  7. Ubuntu 18.04 安装 NVIDIA 显卡驱动超详细步骤
  8. java -jar 命令隐藏黑窗口
  9. 账结法 表结法 两种财务会计处理方法
  10. K-折交叉验证(原理及实现)
  11. 在线视频移动化迁徙加速,UGC待开发
  12. 云服务器 - 腾讯云主机信息
  13. 根据屏幕大小动态设置字体rem
  14. zoc license code
  15. MIPS递归:斐波那契数列
  16. uniapp 微信云开发静态网站和云函数跳转小程序
  17. Pytorch | 报错The given NumPy array is not writeable,and PyTorch does not support non-writeable tensor
  18. UCloud,创业公司死磕公有云的悲壮
  19. 芋道 Spring Boot 安全框架 Spring Security 入门
  20. [工具]网络流量控制软件NetLimiter

热门文章

  1. thinkphp 如何调用百度echarts 数据报表插件
  2. python glob模块的应用
  3. RubyGem version error: rack(1.0.0 runtime)
  4. 编写Android的LKM(Linux Kernel Module)
  5. csv数据源的创建(二)
  6. apt-get安装与卸载
  7. Android UI开发第三十九篇——Tab界面实现汇总及比较
  8. file表单元素怎样设置浏览按钮的样式
  9. [CentOS7]安装tomcat并开启自启动
  10. Netty4 学习笔记之一:客户端与服务端通信 demo