android-无法反序列化对象-预期为BEGIN_OBJECT,但在第1行第1列处为STRING

首先让我说,我在发布之前已经搜索过,只是找不到答案.

我在反序列化JSON时遇到麻烦.这是有效的JSON(已在http://jsonlint.com/中选中)
它是使用servicestack json序列化程序生成的.

我越来越

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1

这是服务器发送的我的JSON:

{
    "artistName": "",
    "pathInfo": "C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3",
    "indexPos": 0,
    "messageType": "song"
}

接收方式:

{"artistName":"","pathInfo":"C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3","indexPos":0,"messageType":"song"}

这是持有它的对象:

public class Song {

    private String artistName;
    private String albumName;
    private String titleName;
    private String pathInfo;
    private String indexPos;
    private String messageType;


    public Song() {
    }

解决方法:

好的,我最终自己找到了答案,但是感谢所有的支持和帮助.

这是接收JSON对象并使用GSON初始化反序列化的代码.

 Map messageObjMap = new Gson().fromJson(message, Map.class);
 String type = messageObjMap.get("messageType").toString();

 switch (type) {
     case "song":
         try {
             Gson gson = new GsonBuilder().create();
             Song song = gson.fromJson(message, Song.class);
             ...
             ...
         } ...
     ...
 }

假设“消息”是整个JSON.相反,它只是从JSON解析的唯一密钥,这就是为什么反序列化不起作用的原因.希望能对某人有所帮助

上一篇:c#-与GSON类似的Json.NET松散键入选项


下一篇:android-预期为BEGIN_ARRAY,但在第1行第35列为BEGIN_OBJECT