2016-11-12 72 views
0

試圖解析Salt CherryPy REST接口的輸出。該JSON是按照下面提供的Gson使用salt-net-api解析錯誤

{"info": [{"Function": "cmd.run", "jid": "20161111182415841377", "Target": "yesMyMaster", "Target-type": "glob", "User": "saltdev", "StartTime": "2016, Nov 11 18:24:15.841377", "Arguments": ["echo HELLO"], "Minions": ["yesMyMaster"], "Result": {}}], "return": [{}]} 

這將導致以下錯誤:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 147 path $.info[0].StartTime 

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) 
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) 
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82) 
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) 
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) 

的代碼很簡單,沒什麼特別的。

Gson gson = new Gson(); 

    ResultInfoSet resultInfos = gson.fromJson(json, ResultInfoSet.class); 

ResultInfo是Salt-Net-Api

一類具有GSON之前任何人遇到了類似的錯誤?

更新

如果我從JSON刪除"StartTime": "2016, Nov 11 18:24:15.841377",然後GSON工作正常。

回答

0

設置如下所述和定義字段作爲POJO類Date 日期格式。在POJO

Gson gson = new GsonBuilder() 
       .setDateFormat("yyyy, MMM dd HH:mm:ss.SSSSSS") 
       .setPrettyPrinting() 
       .create(); 

字段定義: -

@SerializedName("StartTime") 
    private Date startTime; 
1

你必須使用相同類型的適配器庫使用。 你可以找到一個完整的例子here

+0

感謝您指出JsonParser類,它是庫的一部分@lucidd'ResultInfoSet resultInfoSet = JsonParser.JOB_RESULTS.parse(json_str);'正確解析它。 – Nambi