java-杰克逊的JSON(2.5.0)验证无法正常工作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-杰克逊的JSON(2.5.0)验证无法正常工作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2439字,纯文字阅读大概需要4分钟。
内容图文
![java-杰克逊的JSON(2.5.0)验证无法正常工作](/upload/InfoBanner/zyjiaocheng/680/22b0d37c0dc24517ba531af73652f751.jpg)
简单的测试案例:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public static void main(String[] args) throws Exception {
String json = "1,2";
ObjectMapper parser = new ObjectMapper();
JsonNode rootNode = parser.readTree(json);
}
引发异常:
Exception in thread "main" com.fasterxml.jackson.core.JsonParseException:
Unexpected character (',' (code 44)): Expected space separating root-level values
at [Source: 1,2; line: 1, column: 3]
一切都很好,但如果我将String json更改为以下任意一项:
String json = "null,false";
String json = "[1,2,3,null,\"hello\"],false";
String json = "true,3";
String json = "true,{\"test\":3}";
没有抛出异常.
为什么会有差异?
解决方法:
默认情况下,Jackson使用ReaderBasedJsonParser,其中在读取/初始化要解析的JSON时会进行显式检查
switch (i) {
case '"':
_tokenIncomplete = true;
t = JsonToken.VALUE_STRING;
break;
case '[':
if (!inObject) {
_parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
}
t = JsonToken.START_ARRAY;
break;
case '{':
if (!inObject) {
_parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
}
t = JsonToken.START_OBJECT;
break;
case ']':
case '}':
// Error: neither is valid at this point; valid closers have
// been handled earlier
_reportUnexpectedChar(i, "expected a value");
case 't':
_matchTrue();
t = JsonToken.VALUE_TRUE;
break;
case 'f':
_matchFalse();
t = JsonToken.VALUE_FALSE;
break;
case 'n':
_matchNull();
t = JsonToken.VALUE_NULL;
break;
case '-':
/* Should we have separate handling for plus? Although
* it is not allowed per se, it may be erroneously used,
* and could be indicate by a more specific error message.
*/
t = _parseNegNumber();
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
t = _parsePosNumber(i);
break;
从上面的代码中,您可以看到它检查了您提到的字符-null,true,{,[,false等.”如果匹配,它将返回有效的json令牌.那就是为什么,如果你改变
String json = "true,3";
至
String json = "3,true";
它将再次引发众所周知的异常.
请注意,还检查了以字母“ n”开头的给定字符串,以验证它是否与null匹配(同样检查以“ t”,“ f”开头的字符串).
然后有趣的是_parsePosNumber(i)方法,该方法基本上调用_reportMissingRootWS来检查根-显然失败了.
因此,基本上,如果json有效,则永远不会达到“失败者”的情况,或者给定的字符串以“ true”,“ false”,“ null”,“ [”,“ {”,“]”,“}”中的on开头”也将被视为有效的json.
我假设该功能在Jackson non standard features的列表中,因此上述格式被视为有效JSON.
内容总结
以上是互联网集市为您收集整理的java-杰克逊的JSON(2.5.0)验证无法正常工作全部内容,希望文章能够帮你解决java-杰克逊的JSON(2.5.0)验证无法正常工作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。