Json和java转换

时间:2016-11-25 08:02:11

标签: java json gson

下面是我的java代码

Type relMapType = new TypeToken<Map<String, Map<String,   Map<String ,Map<String, List<Set<ProfileData>>>>>>>(){}.getType();
    InputStream is = new FileInputStream("D:\\work.json");
    String jsonTxt;
    try {
        jsonTxt = IOUtils.toString(is);
        System.out.println(jsonTxt);
        JSONObject jsons = new JSONObject(jsonTxt); 
        String jString= gson.toJson(jsons);
            gson.fromJson(jString, relMapType);
        } catch (IOException e) {
        e.printStackTrace();
    }

以下是&#34; work.json&#34;中的json数据。文件

{
   "string1":{
      "string2":{
         "string3":{
            "string4":[
               {
                  "primaryKey":{
                     "projectCode":"PC",
                     "type":"type1",
                     "code1":"data1",
                     "code2":"data2"
                  },
                  "status":"status1",
                  "Id":"123",
                  "frequency":"freq",
                  "destFre":"destFreq"
               }
            ]
         }
      }
   }
}

当我运行代码低于异常时。任何人都可以帮助我吗?

 Exception in thread "main" com.google.gson.JsonSyntaxException:    java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 5 column 21
at com.google.gson.Gson.fromJson(Gson.java:806)
at com.google.gson.Gson.fromJson(Gson.java:761)
at com.google.gson.Gson.fromJson(Gson.java:710)
at com.JsonExample.main(JsonExample.java:97)

引起:java.lang.IllegalStateException:预期BEGIN_ARRAY但在第5行第21行是BEGIN_OBJECT

1 个答案:

答案 0 :(得分:2)

您在Set的{​​{1}}内使用了List。两者都是List<Set<ProfileData>>,因此将被视为数组。 JSON的相同部分是一个对象数组。移除CollectionSet,它应该有效。