如何识别一个字符串是否Json格式

ScriptEngineManager sem = newScriptEngineManager();

ScriptEngine se = sem.getEngineByName("js");

String jsonstr = " \r\n  [{}]";

if(!jsonstr.matches("^[\r\n\f\t\\x20]*[\\{\\[][\\s\\S]*")) {

thrownewScriptException("");

}

se.eval(jsonstr);

System.out.println("是json格式");

} catch(ScriptException e) {

System.out.println("json格式有误");

}json需要分析的情况,比想象的要多,举一个不太简单的json:

[1,{"a":2},\r\n{"a"www.hbbz08.com :{}}, {"a":[]},{"a":[{}]},{"{[a":"\"2,:3,"a":33}]"}]

从上面这个json中,就可以看出需要分析的有:

1:数组和json数组。

2:键与值(无引号、双引号)的识别

3:无限级值嵌套(数组嵌套、json嵌套)

4:7个关键符号[{,:"}]。

5:转义符号、空格、换行、回车处理。

回顾早些年写的jsonhelper

还记得cyq.data里jsonhelper的最初版本,仅处理了只有一级json的简单情况,那时候分析json就靠以下两种方法:

1:split 分隔。

2:循环 indexof 识别。

虽然偷工减料,投机取巧,但只要限定使用环境和条件、好在够用,也够简单。

当然了,现在情况变了,把限定的环境和条件去除后,事实上,要分析起来就没那么简单了。

故事一开始,思考了三天三夜

由于放开了条件,需要考虑无限级递归的,于是看似split和indexof这种方式已经不奏效了。

字符串的分析方法看似需要改朝换代了,但我仍给split和indexof寻求最后的机会。

经过层层思考与分析,发经没折了,只有祭出终极必杀招了。

终极大招:遍历字符,记录状态

一个万能的解决方法,就是遍历每个字符,然后记录这个字符前后左右上下东南西北中发白各种状态,再根据状态来识别下一个字符的动作。

1:首先有一个记录字符状态的类,如下图:

这个字符状态的记录类,我前后不断调整了n天,才终于感觉好像ok了。

2:接下来是字符的状态设置,根据不同的关键字,设置状态,如下图:

这是个漫长不断调试的过程,很折腾人。

3:一个可以不断递归json的函数,如下图:

4:一个可以识别语法错误的函数:

5:最后是一个给外部的调用方法:

如何校验 JSON 数据

先提供两个在线校验JSON工具给您;

如果是程序校验,我们可以采用这种方式,都可以采用转换的方式,如Java

//这里把JSON字符串转换为JSON对象,如果成功,就是正确的。

}cache(Exception e){

//如果进来了,就JSON格式不正确

}方法一:

用jsonobject.fromobject(str),如果异常说明其格式错误。这个方法够粗暴狂野,但是,不能有针对性的校验json。

在每一个接口里去解析json,一层一层、一个一个的校验是否是规定的参数格式。这个方法肯定没问题,但是,懒惰的程序员应该不会这样做的。

在配置文件或数据库里规定一个配置,通过不同的配置去解析不同的json,符合配置则正确,反之则错误。

json格式校验(json格式校验器)相关推荐

  1. 使用go反射校验json是否符合格式

    使用go反射校验json是否符合格式 背景 工作中碰到需要对sbom格式进行校验的情况,sbom官方库没有提供对应的函数操作,所以需要自己根据官方提供的结构体解析对应的json文件,json库提供的反 ...

  2. java 对json 格式做参数格式校验

    需求背景: 在接口中,需要对返回的数据进行格式校验,对于不符合要求的返回数据就表示接口数据有变更,对于该接口及时了解到接口参数的变化.所以需要对接口返回的json 字符串进行格式校验. ps :接口返 ...

  3. JSON格式以及JSON校验工具

    JSON的三种格式 一. JSON的全称 JSON的全称是JavaScript Object Notation 二.为什么需要JSON JSON有三种格式,每一种写法都和JS中的数据类型很像,可以很轻 ...

  4. vue表单校验json数组格式和普通数组格式数据

    1.效果图 说明:3种动作,对应3种验证规则,动作1:数字对象或数组均可(空也可):动作2:只有数组对象可通过验证:动作3:数字类型可通过验证 2.代码实现 (1)template(注意这里的循环数据 ...

  5. 校验json格式_格式化展示,校验错误,编辑JSON,这几个JSON工具一定不能错过

    今天给大家介绍几个常用JSON的工具,基本上能满足你工作中对JSON的所有需求 google插件 JSONView 安装好插件后,格式化接口返回的JSON,还能展开节点和关闭节点,超级方便 格式化本地 ...

  6. 在线Json格式化、在线格式化Json代码、Json代码美化器、Json在线压缩、Json \uxxxx格式解码

    Json代码进行美化.格式化.检查Json错误. 也可以进行Json代码压缩处理,提供Json Unicode转换为对应字符!!将json \uxxxx类,格式化相应的中文字符串!Json 待格式化J ...

  7. 利用JsonSchema校验json数据内容的合规性(转)

    原文地址:Json schema 背景: 复杂的AJAX应用程序可以与数百个不同的JSON服务进行交互,因此,引入对客户端验证的需求. 在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类 ...

  8. 如何利用JSON Schema校验JSON数据格式

    最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...

  9. php判断数组下标,php判断json或者数组格式与给定格式是否一致

    开发的时候碰到个问题,我们技术人员规定了录数据的格式,例如:我们的json模板如下: { "sentence":"Martin and Kelvin went to Ch ...

  10. JSON Shema 校验JSON内容

    背景 大量接口都按JSON传输,按照协议标准定义,JSON的合法性校验可以在代码里写死但是看着有点脏,今天我想安利一下JSON Schema.Json Schema也是一个json文件,可以用于对JS ...

最新文章

  1. html实时显示log,websocketd 实现浏览器查看服务器实时日志
  2. python打开谷歌浏览器 关键字_高效使用Chrome浏览器
  3. J2EE搭建Dynamic web SpringMVC工程404错误分析(三)
  4. 一步步编写操作系统 45 用c语言编写内核2
  5. python标准库sys_Python标准库之Sys模块使用详解
  6. 窥探日志的秘密【华为云分享】
  7. redis哨兵主从不切换_Redis的三种模式:主从、哨兵、集群
  8. 开发提效小技巧分享(一)
  9. unity3D游戏制作—暗黑战神DarkGod
  10. 外设驱动库开发笔记28:W5500以太网控制器
  11. 知网下载论文CAJ格式转为PDF格式
  12. win7计算机管理没有用户模块,Win7系统安装“ipx协议”提示“找不到相应的模块”如何解决...
  13. 使用MAKER进行全基因组基因注释-基础篇
  14. 伊甸园日历游戏 飘飘乎居士拯救MM(tyvj 1968 1140)
  15. imageview显示服务器图片,imageview 直接加载图片流
  16. JS/JQ实现页面跳转
  17. Python WOE的使用
  18. 时域分析瞬时自相关算法、频域分析复倒频分析法、调制域分析过零检测算法以及时频分析小波换算法matlab仿真
  19. 一文了解蛋白功能结构域预测与分析
  20. 八张图,看懂数据分析如何驱动决策

热门文章

  1. UART协议及其Verilog实现
  2. 工业机器人转计算机编程,工业机器人编程怎么入门呢
  3. 数据分析报告4:睡眠情况分析
  4. GAN生成手写字体识别
  5. ZTE MF971V LTE Cat6 MiFi Review
  6. 怎么让放大的图片变清晰?
  7. 今日科技联播:全球区块链专利申请数超5000件,Coinplug第一阿里紧随其后
  8. 产品经理笔试面试(题目+答案)
  9. unity 阳光插件_PR插件BeatEdit安装教程
  10. cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library