我将JSON格式的对象的arraylist存储在一个文件中。一旦出现新的arraylist,它就会以JSON格式转换对象并将其附加到文件中。编码工作正常。但是解码它会引发异常。我在这个领域和学习方面都很陌生。欢迎任何帮助。
编码
public static void jsondumpfile(ArrayList<HtmlElementObject> sanitizelog)
{
try {
File file = new File("c:\\temp\\auditinfojson.json");
if(!file.exists()){
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file,true);
BufferedWriter bw = new BufferedWriter(fileWriter);
Gson gson=new Gson();
//bw.append("---------------");
//bw.append(gson.toJson(sanitizelog));
//fw.append(gson.toJson(sanitizelog));
for(HtmlElementObject eachobj : sanitizelog)
{
bw.write(gson.toJson(eachobj));
}
//bw.flush();
bw.close();
logElementData.clear();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}
编码后的文件结果 {“appLoginId”:1058,“tabId”:“1”,“elementType”:“图片”,“标签”:“无图像名称”,“值”:“https://admin.xyz.com”,“seqTrail”:“没有可能的跟踪序列“,”timeStamp“:”2014-01-31 13:02:42.618“} {“appLoginId”:1058,“tabId”:“1”,“elementType”:“图片”,“标签”:“无图像名称”,“值”:“https://admin.xyz.com/xyz/images/btn-cancel.gif”,“seqTrail”:“没有可能的跟踪序列“,”timeStamp“:”2014-01-31 13:02:42.625“}
像这样存储多个对象。
解码/分配代码
public static void extractfromjson() throws IOException
{
ArrayList<HtmlElementObject> tCollection = new ArrayList<HtmlElementObject>();
Gson gson = new Gson();
BufferedReader bufferedReader = new BufferedReader(new FileReader(
"c:\\temp\\auditinfojson.json"));
Type type = new TypeToken<ArrayList<HtmlElementObject>>(){}.getType();
ArrayList<HtmlElementObject> J_tweet = (ArrayList<HtmlElementObject>)gson.fromJson(bufferedReader, type);
System.out.println(J_tweet);
}
EXCEPTION THROWN ** com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY但在第1行第2列为BEGIN_OBJECT ** 当我想要检索数据时,就会出现这种情况。
答案 0 :(得分:1)
当我们有JSON时,GSON无法将其解析为具有List类类型的字段的Java类。当JSON数据以“对象”格式匹配时,它将引发异常“预期BEGIN_ARRAY但为BEGIN_OBJECT”。
https://github.com/sacdroid这个人做了一个Java适配器来解决此问题。
下面可以使用这些类,然后在构造GSON实例时,必须将 TypeAdapterFactory 和 ArrayAdapterFactory 分配给 GsonBuilder 。
Gson gson = new GsonBuilder().registerTypeAdapterFactory(new ArrayAdapterFactory()).create();
ArrayAdapter.java http://sachinpatil.com/downloads/code/ArrayAdapter.java
ArrayAdapterFactory.java http://sachinpatil.com/downloads/code/ArrayAdapterFactory.java
PS:在这种情况下,您的JSON出现问题,您的JSON内容无效,我将其修复了,将 [](括号)放在{}和,(逗号)分隔:
[{
"appLoginId": 1058,
"tabId": "1",
"elementType": "Image",
"label": "No Image Name",
"value": "https://admin.xyz.com",
"seqTrail": "No possible trail sequence",
"timeStamp": "2014-01-31 13:02:42.618"
}, {
"appLoginId": 1058,
"tabId": "1",
"elementType": "Image",
"label": "No Image Name",
"value": "https://admin.xyz.com/xyz/images/btn-cancel.gif",
"seqTrail": "No possible trail sequence",
"timeStamp": "2014-01-31 13:02:42.625"
}]