java校验json格式,java判断json格式是否合法

本文目录一览:

Java用于校验一个字符串是否是合法的JSON格式

ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine se = sem.getEngineByName(“js”);String jsonstr = ” \r\n [{}]”;try { if (!jsonstr.matches(“^[\r\n\f\t\\x20]*[\\{\\[][\\s\\S]*”)) { throw new ScriptException(“必须以{或[开头”); } se.eval(“(” + jsonstr + “)”); System.out.println(“是json格式”);} catch (ScriptException e) { String exp = e.toString().replaceAll(“.*\\:(.*)”, “$1”); System.err.println(exp.replaceAll(“\\(.+(?=at)”, “”));}

java校验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 = “{\”website\”:\”open-open.com\”}”;

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

}

}

java校验json数据是否合法要怎么写?数据是别的公司传过来的!

现在有很多JSON的工具包,可以将json字符串转换为json对象,你try/catch住你转换的代码,如果转换成功,则表示json是合法的,反之这表示json数据有问题。但要验证数据是否符合你的业务要求,需要你自己写方法验证。

JSON工具可以使用 Jackson,fastjson等,具体使用方法在网上搜索。

原创文章,作者:XPAJ,如若转载,请注明出处:https://www.506064.com/n/144094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XPAJXPAJ
上一篇 2024-10-24 15:27
下一篇 2024-10-24 15:27

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论