修改 我已添加详细信息类并修复了重复键。日期实际上是字符串。
使用gson 2.8和eclipse。
我设法解析了JSON文件并存储和打印了值, 但我仍然得到例外。 (BEGIN_OBJECT预计但在第1行第2列STRING)
我检查了其他解决方案, 喜欢将对象放在预期的位置, 但它只是引发了一个不同的例外。例如(期望begin_array)
Json文件
[{"numValue1":"1",
"StringValue1":"EI",
"StringValue2":"A",
"enumValue1":"TYPE_A",
"numValue2":"3221",
"StringValue3":"DDEF",
"StringValue4":"Mexicof",
"numValue3":"8",
"stringDate1":"27/05/2017 11:55",
"stringDate2":"29/09/2016 11:55",
"stringDate3":"27/05/2017 11:57"}]
用于解析文件的代码
Gson gson = new GsonBuilder().setDateFormat("dd/MM/yyyy HH:mm").create();
Details[] feedRecord = gson.fromJson(data.trim(), Details[].class);
详细信息类
public class Details implements Serializable {
enum Type {
TYPE_D, TYPE_A
};
@SerializedName("numValue1")
private Integer num1;
@SerializedName("StringValue1")
private String string1;
@SerializedName("StringValue2")
private String string2;
@SerializedName("numValue2")
private String num2;
@SerializedName("StringValue3")
private String string3;
@SerializedName("StringValue4")
private String string3;
@SerializedName("numValue3")
private String num3;
@SerializedName("StringDate1")
private String date1;
@SerializedName("StringDate2")
private String date2;
@SerializedName("StringDate3")
private String date3;
@SerializedName("enumType1")
private Type enumType;
}
异常
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $[0]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.google.gson.Gson.fromJson(Gson.java:773)
答案 0 :(得分:0)
使用JsonParser,例外是:(我修改了重复的密钥)
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 252 path $
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1559) ~[gson-2.8.0.jar:na]
Gson api声明日期模式应遵循
http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html?is-external=true
这不会引发异常:
String str = "[{\"numValue1\":\"1\",\"StringValue1\":\"EI\",\"StringValue2\":\"A\",\"enumValue1\":\"TYPE_A\",\"numValue11\":\"3221\",\"StringValue4\":\"DDEF\",\"StringValue5\":\"Mexicof\",\"numValue2\":\"8\",\"stringDate1\":\"27/05/2017 11:55\",\"Date2\":\"29/09/2016 11:55\",\"Date3\":\"27/05/2017 11:57\"}]\"";
Gson gson = new GsonBuilder().setDateFormat("MM/dd/yyyy HH:mm").create();
JsonReader jr = gson.newJsonReader(new StringReader(str));
jr.beginArray();
jr.beginObject();
System.out.println(jr.nextName());
第252列是日期数据开始的地方