从文件中读取多个JSONObject

时间:2014-01-31 09:23:06

标签: java json parsing

我将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 ** 当我想要检索数据时,就会出现这种情况。

1 个答案:

答案 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"
}]