飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

Java JSON 验证实例子

时间:2021-11-10  作者:匿名  

JAVA  验证 json是否是符合格式

实际演示地址为 :  http://域名/tool/findJson

暂时还没有别的错误

import 域名acterIterator;
import 域名ngCharacterIterator;
import 域名Map;
/**
 * 用于校验一个字符串是否是合法的JSON格式
 * @author liShuMin
 *
 */
public class JsonValidator {

    private CharacterIterator it;
    private char              c;
    private int               col;
    public static String  errorStr="";

    public JsonValidator(){
    }

    /**
     * 验证一个字符串是否是合法的JSON串
     * 
     * @param input 要验证的字符串
     * @return true-合法 ,false-非法
     */
    public boolean validate(String input) {
        input = 域名();
        boolean ret = valid(input);
        return ret;
    }

    private boolean valid(String input) {
        if ("".equals(input)) return true;

        boolean ret = true;
        it = new StringCharacterIterator(input);
        c = 域名t();
        col = 1;
        if (!value()) {
            ret = error("value", 1);
        } else {
            skipWhiteSpace();
            if (c != 域名) {
                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 = 域名t();
        if (c != t) return false;

        int start = col;
        boolean ret = true;
        for (t = 域名(); t != 域名; t = 域名()) {
            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 (!域名git(c) && c != \'-\') return false;
        int start = col;
        if (c == \'-\') nextCharacter();
        if (c == \'0\') {
            nextCharacter();
        } else if (域名git(c)) {
            while (域名git(c))
                nextCharacter();
        } else {
            return error("number", start);
        }
        if (c == \'.\') {
            nextCharacter();
            if (域名git(c)) {
                while (域名git(c))
                    nextCharacter();
            } else {
                return error("number", start);
            }
        }
        if (c == \'e\' || c == \'E\') {
            nextCharacter();
            if (c == \'+\' || c == \'-\') {
                nextCharacter();
            }
            if (域名git(c)) {
                while (域名git(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 != 域名; 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 = 域名();
        ++col;
        return c;
    }

    private void skipWhiteSpace() {
        while (域名itespace(c)) {
            nextCharacter();
        }
    }

    private boolean error(String type, int col) {
    	
      //   域名tf("type: %s, col: %s%s", type, col, 域名roperty("域名rator"));
         errorStr+="type:"+type+", col:"+col+域名roperty("域名rator");
         return false;
    }
    public static void main(String[] args){
    	//String jsonStr = "{\\"website\\":\\"域名\\"}";
    	String jsonStr = "{"
			+ " \\"ccobjtypeid\\": \\"1001\\","
			+ " \\"fromuser\\": \\"李四\\","
			+ " \\"touser\\": \\"张三\\","
			+ "  \\"desc\\": \\"描述\\","
			+ "  \\"subject\\": \\"主题\\","
			+ "  \\"attach\\": \\"3245,3456,4345,4553\\","
			+ " \\"data\\": {"
			+ "    \\"desc\\": \\"测试对象\\","
			+ "     \\"dataid\\": \\"22\\","
			+ "    \\"billno\\": \\"TEST0001\\","
			+ "    \\"datarelation\\":["
			+ " {"
			+ "  \\"dataname\\": \\"关联对象1\\","
			+ "  \\"data\\": ["
			+ "      {"
			+ "    \\"dataid\\": \\"22\\","
			+ "          \\"datalineid\\": \\"1\\","
			+ "          \\"content1\\": \\"test1\\","
			+ "          \\"content2\\": \\"test2\\""
			+ "      }"
			+ "  ]"
			+ " }"
			+ " ]"
			+ "  }"
			+ " }";
    	域名tln(new JsonValidator().validate(jsonStr));
    	域名tln(errorStr);
    }
}
标签:实例验证
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。