Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json文件已解析,但仍收到异常:应为BEGIN_对象,但为字符串_Java_Json_Parsing_Gson_Unmarshalling - Fatal编程技术网

Java Json文件已解析,但仍收到异常:应为BEGIN_对象,但为字符串

Java Json文件已解析,但仍收到异常:应为BEGIN_对象,但为字符串,java,json,parsing,gson,unmarshalling,Java,Json,Parsing,Gson,Unmarshalling,编辑 我已经添加了details类并修复了重复键。日期实际上是字符串 使用gson 2.8和eclipse 我设法解析了JSON文件并存储和打印了值, 但我还是有例外。 (应为BEGIN_对象,但在第1行第2列为字符串) 我检查过其他解决方案, 就像把一个物体放在期望的地方, 但它只是抛出了一个不同的异常。e、 g(应使用begin_数组) Json文件 [{"numValue1":"1", "StringValue1":"EI", "StringValue2":"A", "enumValue1

编辑 我已经添加了details类并修复了重复键。日期实际上是字符串

使用gson 2.8和eclipse

我设法解析了JSON文件并存储和打印了值, 但我还是有例外。 (应为BEGIN_对象,但在第1行第2列为字符串)

我检查过其他解决方案, 就像把一个物体放在期望的地方, 但它只是抛出了一个不同的异常。e、 g(应使用begin_数组)

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);
用于分析文件的代码

[{"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)

使用JsonParser,例外情况是:(我修改了重复键)

Gson api声明应该遵循日期模式

这并不例外:

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列是日期数据开始的地方

您如何确定您在这里显示的JSON正是
数据
的内容?好吧,您有一个重复的密钥,我不知道这是否会导致gson失败,但是…可能的重复我们看不到您的
详细信息
分类包含详细信息类。这有点重要,因为gson正在基于imput抛出异常,该异常应该导致Details类的实例。