Java JsonB在有效的JSON而不是Jackson上抛出解析错误';s对象映射器
在下面的Java代码中,我注意到使用Java JsonB在有效的JSON而不是Jackson上抛出解析错误';s对象映射器,java,json,jackson,jsonb,Java,Json,Jackson,Jsonb,在下面的Java代码中,我注意到使用JsonB和JacksonObjectMapper解析JSON值时的不同行为。事实上,JsonB抛出错误,我不知道是否需要使用某些配置值创建JsonB,以避免这些错误 import com.fasterxml.jackson.databind.JsonNode; 导入com.fasterxml.jackson.databind.ObjectMapper; 导入javax.json.JsonValue; 导入javax.json.bind.Jsonb; 导入ja
JsonB
和JacksonObjectMapper
解析JSON值时的不同行为。事实上,JsonB
抛出错误,我不知道是否需要使用某些配置值创建JsonB
,以避免这些错误
import com.fasterxml.jackson.databind.JsonNode;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入javax.json.JsonValue;
导入javax.json.bind.Jsonb;
导入javax.json.bind.JsonbBuilder;
公共类应用程序{
私有静态Jsonb Jsonb=JsonbBuilder.create();
私有静态ObjectMapper jacksonObjectMapper=新ObjectMapper();
公共静态void main(字符串[]args){
System.out.println(“****************************************”);
System.out.println(“*JSON解析使用Jackson*”);
System.out.println(“****************************************”);
parseJsonUsingJacksonObjectMapper(“{}”);
ParseJSonSingJacksonObject映射器(“[]”);
ParseJSonusingJacksonObject映射器(“123”);
ParseJSonusingJacksonObject映射器(“文本”);
parseJsonUsingJacksonObjectMapper(“true”);
System.out.println();
System.out.println(“****************************************”);
System.out.println(“*JSON解析使用JsonB*”);
System.out.println(“****************************************”);
parseJsonUsingJsonB(“{}”);
parseJsonUsingJsonB(“[]”);
parseJsonUsingJsonB(“123”);
parseJsonUsingJsonB(“\”text\”);
parseJsonUsingJsonB(“真”);
}
私有静态void parseJsonUsingJsonB(字符串json){
试一试{
JsonValue-JsonValue=jsonb.fromJson(json,JsonValue.class);
System.out.println(String.format(“%-15s”,“json:+json)+”->type:+jsonValue.getClass());
}捕获(例外e){
System.out.println(“使用JsonB解析“+json+””时出错。异常:“+e.getClass()+”。消息:“+e.getMessage());
}
}
私有静态void parseJsonUsingJacksonObjectMapper(字符串json){
试一试{
JsonNode jsonValue=jacksonObjectMapper.readValue(json,JsonNode.class);
System.out.println(String.format(“%-15s”,“json:+json)+”->type:+jsonValue.getClass());
}捕获(例外e){
System.out.println(“使用Jackson ObjectMapper解析“+json+””时出错。异常:“+e.getClass()+”。消息:“+e.getMessage());
}
}
}
输出
******************************
* JSON parsing using Jackson *
******************************
json: {} -> type: class com.fasterxml.jackson.databind.node.ObjectNode
json: [] -> type: class com.fasterxml.jackson.databind.node.ArrayNode
json: 123 -> type: class com.fasterxml.jackson.databind.node.IntNode
json: "text" -> type: class com.fasterxml.jackson.databind.node.TextNode
json: true -> type: class com.fasterxml.jackson.databind.node.BooleanNode
******************************
* JSON parsing using JsonB *
******************************
json: {} -> type: class org.glassfish.json.JsonObjectBuilderImpl$JsonObjectImpl
Error while parsing '[]' using JsonB. Exception: class javax.json.bind.JsonbException. message: Can't deserialize JSON array into: interface javax.json.JsonValue
Error while parsing '123' using JsonB. Exception: class java.util.NoSuchElementException. message: null
Error while parsing '"text"' using JsonB. Exception: class java.util.NoSuchElementException. message: null
Error while parsing 'true' using JsonB. Exception: class java.util.NoSuchElementException. message: null