java验证json合法性_java校验json字符串是否合法
/**
* 用于校验一个字符串是否是合法的JSON格式
*
*/
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
public class JsonValidator {
private CharacterIterator it;
private char c;
private int col;
public JsonValidator() {
}
/**
*
* 验证一个字符串是否是合法的JSON串
*
*
*
* @param input
* 要验证的字符串
*
* @return true-合法 ,false-非法
*/
public boolean validate(String input) {
input = input.trim();
boolean ret = valid(input);
return ret;
}
private boolean valid(String input) {
if ("".equals(input))
return true;
boolean ret = true;
it = new StringCharacterIterator(input);
c = it.first();
col = 1;
if (!value()) {
ret = error("value", 1);
} else {
skipWhiteSpace();
if (c != CharacterIterator.DONE) {
ret = error("end", col);
}
}
return ret;
}
private boolean value() {
return literal("true") || literal("false") || literal("null")
|| string() || number() || object() || array();
}
private boolean literal(String text) {
CharacterIterator ci = new StringCharacterIterator(text);
char t = ci.first();
if (c != t)
return false;
int start = col;
boolean ret = true;
for (t = ci.next(); t != CharacterIterator.DONE; t = ci.next()) {
if (t != nextCharacter()) {
ret = false;
break;
}
}
nextCharacter();
if (!ret)
error("literal " + text, start);
return ret;
}
private boolean array() {
return aggregate('[', ']', false);
}
private boolean object() {
return aggregate('{', '}', true);
}
private boolean aggregate(char entryCharacter, char exitCharacter,
boolean prefix) {
if (c != entryCharacter)
return false;
nextCharacter();
skipWhiteSpace();
if (c == exitCharacter) {
nextCharacter();
return true;
}
for (;;) {
if (prefix) {
int start = col;
if (!string())
return error("string", start);
skipWhiteSpace();
if (c != ':')
return error("colon", col);
nextCharacter();
skipWhiteSpace();
}
if (value()) {
skipWhiteSpace();
if (c == ',') {
nextCharacter();
} else if (c == exitCharacter) {
break;
} else {
return error("comma or " + exitCharacter, col);
}
} else {
return error("value", col);
}
skipWhiteSpace();
}
nextCharacter();
return true;
}
private boolean number() {
if (!Character.isDigit(c) && c != '-')
return false;
int start = col;
if (c == '-')
nextCharacter();
if (c == '0') {
nextCharacter();
} else if (Character.isDigit(c)) {
while (Character.isDigit(c))
nextCharacter();
} else {
return error("number", start);
}
if (c == '.') {
nextCharacter();
if (Character.isDigit(c)) {
while (Character.isDigit(c))
nextCharacter();
} else {
return error("number", start);
}
}
if (c == 'e' || c == 'E') {
nextCharacter();
if (c == '+' || c == '-') {
nextCharacter();
}
if (Character.isDigit(c)) {
while (Character.isDigit(c))
nextCharacter();
} else {
return error("number", start);
}
}
return true;
}
private boolean string() {
if (c != '"')
return false;
int start = col;
boolean escaped = false;
for (nextCharacter(); c != CharacterIterator.DONE; nextCharacter()) {
if (!escaped && c == '\\') {
escaped = true;
} else if (escaped) {
if (!escape()) {
return false;
}
escaped = false;
} else if (c == '"') {
nextCharacter();
return true;
}
}
return error("quoted string", start);
}
private boolean escape() {
int start = col - 1;
if (" \\\"/bfnrtu".indexOf(c) < 0) {
return error(
"escape sequence \\\",\\\\,\\/,\\b,\\f,\\n,\\r,\\t or \\uxxxx ",
start);
}
if (c == 'u') {
if (!ishex(nextCharacter()) || !ishex(nextCharacter())
|| !ishex(nextCharacter())
|| !ishex(nextCharacter())) {
return error("unicode escape sequence \\uxxxx ", start);
}
}
return true;
}
private boolean ishex(char d) {
return "0123456789abcdefABCDEF".indexOf(c) >= 0;
}
private char nextCharacter() {
c = it.next();
++col;
return c;
}
private void skipWhiteSpace() {
while (Character.isWhitespace(c)) {
nextCharacter();
}
}
private boolean error(String type, int col) {
System.out.printf("type: %s, col: %s%s", type, col,
System.getProperty("line.separator"));
return false;
}
public static void main(String[] args) {
String jsonStr = "{\"order_id\":\"1000088345\",\"status\":\"0\",\"pro_total_fee\":\"390.00\",\"order_created\":\"2013-12-26 12:11:11\",\"pay_time\":\"\",\"deliver_time\":\"\",\"finish_time\":\"\",\"payment\":\"390.00\",\"pay_mode_id\":\"2\",\"trans_price\":\"0.00\",\"seller_remark\":\"null\",\"order_product_list\":{\"order_product\":[{\"product_code\":\"1000251\",\"sku_id\":\"1000251\",\"cid\":\"\",\"unit_price\":\"145.00\",\"buy_count\":\"1\"},{\"product_code\":\"1000250\",\"sku_id\":\"1000250\",\"cid\":\"\",\"unit_price\":\"245.00\",\"buy_count\":\"1\"}]},\"UserInfo\":{\"fullname\":\"raymondji\",\"full_address\":\"西三条九号\",\"telephone\":\"\",\"mobile\":\"13800138000\",\"province\":\"北京\",\"city\":\"北京\",\"county\":\"中国\"}}";
System.out.println(jsonStr + ":"
+ new JsonValidator().validate(jsonStr));
}
}
java验证json合法性_java校验json字符串是否合法相关推荐
- java验证身份证合法性_Java安全性,第2部分:身份验证和授权
关于本教程 本教程是关于什么的? 也许没有比应用程序安全更重要的软件工程主题. 攻击是昂贵的,无论是来自内部还是外部,而且某些攻击可能会使软件公司承担赔偿责任. 随着计算机(尤其是Internet)技 ...
- java 验证手机号格式_java 校验手机号格式
主要用到这两个包: import java.util.regex.Matcher; import java.util.regex.Pattern; Pattern类用于创建一个正则表达式,生成一个Pa ...
- java验证图片大小_java 校验图片的大小、尺寸、比例
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.i ...
- java json自定义_java返回json设置自定义的格式
springMvc返回Json中自定义日期格式 (一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annota ...
- java 如何导出json文件_java导出json格式文件的示例代码
本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: import java.io.File; import java.io.FileWriter; import java.io. ...
- java封装对象数组_java解析JSON对象和封装对象的示例
在本例中java解析JSON对象使用的是org.json,因此,如果各位想测试我的代码,请先确保有java.json.jar包,否则,就需要去网上下载这个jar包,然后才可以正常使用本代码. 本例的功 ...
- java读取json文件_Java 读取Json文件内容
读取json文件为String类型: import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logge ...
- java服务端 json接口_java以json格式向后台服务器接口发送请求的实例
java以json格式向后台服务器接口发送请求的实例 发布于 2021-1-14| 复制链接 下面小妖就为大家分享一篇java以json格式向后台服务器接口发送请求的实例,具有很好的参考价值,希望对大 ...
- java解析json数据_java解析JSON数据详解
JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...
最新文章
- ftp 主动或者被动ftp
- bike with a famous logo
- HDU1527 - 取石子游戏【威佐夫博弈】
- python离线安装依赖包_python离线安装外部依赖包的实现
- SpringBoot从零单排 ------ 拦截器的使用
- 简述关系型数据库和非关系型数据库
- python shell怎么调字体大小_如何更改在Python Shell字体大小
- 测试面试中的常见10道接口面试题
- 如何计算Lyapunov exponent spectrum?matlab计算李雅普诺夫指数
- 使用脚本自制 SSL 域名证书
- 80286微处理器和80386的优缺点
- 《私募股权基金投资基础知识》---第三章
- 【智能优化算法-灰狼算法】基于非支配排序灰狼优化器(NS-GWO)算法求解多目标优化算法附matlab代码
- easyui手风琴菜单
- 解决height:100vh超出屏幕高度的问题
- Google开放星空观测应用SkyMap源代码
- Selenium IDE安装与运行
- html 抽奖的页面,html网页抽奖
- ACS服务器的备份和恢复
- 批发供应系统批发订货发货管理系统开发功能
热门文章
- Vue3@cli项目结构
- Android工程Gradle仓库配置及说明
- web端消息推送的方式介绍
- scala的数值类型(三)
- ReplaceAll()和Replace的实战用法
- jsx怎么往js里传参数_给js文件传参数(详解)
- Java集合List,Set,Map,Queue,Deque
- OpenShift4 - 使用 Service CA 证书增加内部通讯安全
- OpenShift 4 之 配置基于Red Hat SSO的Identity Providers
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第1天