我有一个WebSocket服务器,它向用户发送一个JSON字符串:
{
"message_type" : "draw",
"point": {
"color" : "#3b7bbf",
"width" : 20,
"x" : 191.98608,
"y" : 891.96094
},
"sender_id" : "123456abc"
}
我已经创建了一个Java对象,用于GSON解析:
public class WsMessage {
private String message_type;
private String sender_id;
private Point point;
public WsMessage(String message_type, String sender_id, Point point) {
this.message_type = message_type;
this.sender_id = sender_id;
this.point = point;
}
public String getMessage_type() {
return message_type;
}
public String getSender_id() {
return sender_id;
}
public Point getPoint() {
return point;
}
@NonNull
@Override
public String toString() {
return new GsonBuilder().create().toJson(this, WsMessage.class);
}
}
然而,它仍然给我一个传入消息的com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
错误。
下面是我如何使用GSON:
WsMessage wsMessage = gson.fromJson(text, WsMessage.class);
Log.d(TAG, "onMessage: Msg: " + wsMessage.toString());
我知道我的WsMessage
类的结构有问题,但我不确定是什么问题。
编辑日期:________________________________________________
下面是我的Point
类:
public class Point {
private float x;
private float y;
private String color;
private int width;
private Point() {
}
public Point(float x, float y, String color, int width) {
this.x = x;
this.y = y;
this.color = color;
this.width = width;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public String getColor() {
return color;
}
public int getWidth() {
return width;
}
@Override
public String toString() {
return new GsonBuilder().create().toJson(this, Point.class);
}
}
编辑2:_________________________________________________________
经过几个小时的调试......发现是服务器端在JSON对象前面添加字符串时出现了问题,我没有注意到,因为我使用log.d将其打印出来。GSON转换json字符串时没有出现问题。
3条答案
按热度按时间omqzjyyz1#
使用Gson创建响应模型类,如下所示:
下面是您的WsMessage类,
这是“您的观点”课程,
现在您可以解析WsMessage类中任何值,API调用后使用Gson www.example.com打印您WsMessagelib.like:
umuewwlo2#
请尝试使用此解析器。
r6vfmomb3#
经过几个小时的调试......原来是服务器端在JSON对象前面添加了一个
string
的问题,我在使用log.d
输出时没有注意到这个问题。GSON转换json字符串没有问题。