我正在尝试读取数据库配置详细信息,并使用杰克逊映射器解析json字符串,并将异常作为意外的输入结束:预期为ARRAY的结束标记。
DatabaseConfiguration是带有两个变量Name和Value的pojo类 我需要使用杰克逊解析器进行解析。
Exception:com.fasterxml.jackson.core.JsonParseException:意外 输入结束:ARRAY的预期结束标记(来自[来源:[;行: 1,列:0]) 在[来源:[;行:1,列:3]
JsonString:
[
{
"Name": "driverclass",
"Value": "com.mysql.jdbc.Driver"
},
{
"Name": "password",
"Value": "abc"
},
{
"Name": "url",
"Value": "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false"
},
{
"Name": "username",
"Value": "abc"
}
]
还尝试了json字符串:
[ { "Name": "jdbc.connection.driver_class", "Value": "com.mysql.jdbc.Driver" }, { "Name": "password", "Value": "abc" }, { "Name": "url", "Value": "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false" }, { "Name": "username", "Value": "abc" } ]
代码:
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
public class Parser {
private static void parseJson(String dbConnectionValues) {
try {
List<DatabaseConfiguration> list = new ObjectMapper().readValue(dbConnectionValues,
TypeFactory.defaultInstance().constructCollectionType(List.class, DatabaseConfiguration.class));
for (DatabaseConfiguration l : list) {
String key = l.getName();
String value = l.getValue();
System.out.println("key:" + key + "value:" + value);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
String jsonString = args[0];
parseJson(jsonString);
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class DatabaseConfiguration {
String name;
String value;
@JsonProperty("Name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@JsonProperty("Value")
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
答案 0 :(得分:1)
我无法复制确切的异常,但是在Java类和json对象中确实看到了命名约定问题。您未遵循骆驼套,这肯定会导致错误的字段映射,因此会导致与您面临的解析异常不同的解析异常。
我刚刚对您的json字符串和DBConfig类进行了这些更改,因此我能够成功运行代码。
class DatabaseConfiguration {
String name;
String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
String testJson = "[{\"name\":\"driverclass\",\"value\":\"com.mysql.jdbc.Driver\"},{\"name\":\"password\",\"value\":\"abc\"},{\"name\":\"url\",\"value\":\"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false\"},{\"name\":\"username\",\"value\":\"abc\"}]";
[
{
"name":"driverclass",
"value":"com.mysql.jdbc.Driver"
},
{
"name":"password",
"value":"abc"
},
{
"name":"url",
"value":"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false"
},
{
"name":"username",
"value":"abc"
}
]
您的命令行json输入字符串应如下所示,并用双引号引起来:
"[ { \"Name\": \"jdbc.connection.driver_class\", \"Value\": \"com.mysql.jdbc.Driver\" }, { \"Name\": \"password\", \"Value\": \"abc\" }, { \"Name\": \"url\", \"Value\": \"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false\" }, { \"Name\": \"username\", \"Value\": \"abc\" } ]"