尝试解析Salt CherryPy REST接口的输出。 Json的提供如下,
{"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 :(得分:1)
您必须使用库所使用的相同类型的适配器。 您可以找到完整的示例here。
答案 1 :(得分:0)
如下所述设置日期格式,并在POJO类中将字段定义为日期。
Gson gson = new GsonBuilder()
.setDateFormat("yyyy, MMM dd HH:mm:ss.SSSSSS")
.setPrettyPrinting()
.create();
POJO中的字段定义: -
@SerializedName("StartTime")
private Date startTime;