首先让我说,我在发帖之前已经搜索过,但是找不到答案。
我无法反序列化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() {
}
答案 0 :(得分:3)
好的,我最终自己找到了答案,但感谢所有支持和帮助。
这是接收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中解析出来的一个密钥,这就是deserializtion无法正常工作的原因。希望能帮到某人
答案 1 :(得分:0)
String json = "{\"artistName\":\"\",\"pathInfo\":\"C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3\",\"indexPos\":0,\"messageType\":\"song\"}";
final JSONObject jsonObject = new JSONObject(json);
String path = jsonObject.getString("pathInfo");
我还没有使用Gson,但尝试这个并告诉我它是否有效