展开全部

||代码如下

import java.text.CharacterIterator;

import java.text.StringCharacterIterator;

public class JsonValidator {

private CharacterIterator it;

private char c;

private int col;

public JsonValidator(){

}

/**

* 验证一个字符串e5a48de588b662616964757a686964616f31333361306330是否是合法的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 = "{\"website\":\"open-open.com\"}";

System.out.println(jsonStr+":"+new JsonValidator().validate(jsonStr));

}

}

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 校验 json_java校验json格式及内容相关推荐

  1. java实现json_java实现Json格式美化【工具包系列】

    package com.json; /** * 该类提供格式化JSON字符串的方法. * 该类的方法formatJson将JSON字符串格式化,方便查看JSON数据. * 例如: * JSON字符串: ...

  2. java中的json_Java中Json格式总结

    Java中Json格式总结 JSON(JavaScript Object Notation) 是一种轻量级的基于文本的数据交换格式.它采用完全独立于语言的文本格式,易于读写同时也易于机器解析和生成(网 ...

  3. java代码里的JSON格式怎么写好看_python3 循环读取excel文件并写入json操作

    文件内容: excel内容: 代码: import xlrdimport jsonimport operatordef read_xlsx(filename): # 打开excel文件 data1 = ...

  4. java 格式化json_JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的 ...

  5. java json重命名,eclipse中java变量怎么变成json格式的编码?

    我们想要使用eclipse来进行从java变量到json格式的编码米该怎么实现呢?下面我们就来看看详细的教程. 一.导入jar包 1.我们首先要下载好我们需要的json包,然后我们右击项目,选择&qu ...

  6. EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用

    做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...

  7. java发送post请求json格式_go语言web开发框架学习系列二:Get、Post、Put等请求及数据返回格式...

    数据请求方式的分类 所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP ...

  8. java封装省市区三级json格式,2016中国省市区三级联动json格式.pdf

    2016中国省市区三级联动json格式 2016 年中国省市区三级联的JSON 格式 {"北京市":{"name":"北京市"," ...

  9. java 转json_Java转JSON串的几种方式

    昨天在与对端系统调接口的时候,对端系统对我们传过去的json串老是处理不了,后来查原因是应为我们传过去的json串里有json对象数组,因为我们的json串存在表里的,取出来是作为json字符串放到j ...

  10. java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据

    一.在PC Window(QT5版本) 1.1.构建URL 1.2.构建HTTP请求头 1.3.连接信号与操作,接收服务器回复的消息 槽函数这里我们要在头文件定义,然后把处理过程实现. void Ma ...

最新文章

  1. Jmeter 可视化监控
  2. 荐书 | 10 本机器学习电子书,美版 Kindle 免费读
  3. 【阿里云新品发布·周刊】第12期
  4. mysql数据库入门教程(9):数据的常见约束
  5. ReverseFind
  6. 使用LiteOS Studio图形化查看LiteOS在STM32上运行的奥秘
  7. 飞利浦医疗收购Direct Radiology,加强远程放射学服务能力
  8. ArcGIS应用视频教程(视频+PPT+实验数据)
  9. 【maven】maven-scm-plugin 使用
  10. 一维码和二维码相关知识
  11. 紫光输入法linux,紫光拼音输入法
  12. Linux批量转图,CMYK转RGB
  13. 【刘晓燕长难句分析】1.简单句
  14. [转] 串行传输 VS 并行传输
  15. 【数据治理-01】开篇:一起聊聊数据治理
  16. EOS 柚子开发资源汇总
  17. 奥升德赢得三星SDI锂离子电池添加剂专利案;蜂巢能源完成102.8亿元人民币B轮融资;伊顿、特灵科技、芬美意发布财报 | 能动...
  18. Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 85 bytes)
  19. EA绘制类图时,怎样将类由ICON形式(圆形)转为Label形式(方形)
  20. quadro显卡好在哪

热门文章

  1. 这款抗癌机器人能在血管里跑酷!直径小至3微米,每秒移动600微米
  2. 一台服务器最大能支持多少条 TCP 连接?面试官的话问倒一大片。。。
  3. 中国科学院大学计算机所地址,兰艳艳-中国科学院大学-UCAS
  4. 小米路由器部分机型刷原生Openwrt系统
  5. python的设计具有很强的可读性、相比其他语言_python简介
  6. 商品sku数据库设计
  7. TTI bundling
  8. (二十四)深入理解蓝牙BLE之“H5协议”
  9. 波浪形状html,使用CSS3线性渐变(linear-gradient)实现文本波浪线效果_html/css_WEB-ITnose...
  10. 属性动画+购物车+全选反选+选中计算价格+单个删除