Gson toJson返回JSON字符串而不是JSON对象



我与toJson使用的类

class LoadUserDTO: Serializable {
@SerializedName("userGuid")
var userGuid: String? = null
@SerializedName("userToken")
var userToken: String? = null
constructor(userGuid: String, userToken: String) {
this.userGuid = userGuid
this.userToken = userToken
}
}

其余的使用:

val payload = LoadUserDTO(userGuid = user.guid!!, userToken = user.token!!)
val jsonPayload = Gson().toJson(payload)
this.socketService.socket.emit(EndpointsEnum.AppLoadUser, jsonPayload)

jsonPayload应该是JSON Object。相反,整个东西是一个字符串,应该是JSON对象:

"{"userGuid":"...","userToken":"..."}"

当它被服务器接收时,它不是像Web UI或Swift App发送的那样接收JSON对象,而是一个字符串,没有转换成JSON对象。

try this,

var jsonString = """{"id":1,"description":"Test"}""";
var testModel = gson.fromJson(jsonString, TestModel::class.java)

根据您的需求而不是使用Gson,您可以使用String.format通过一行代码来实现这一点-

// val payload = LoadUserDTO(userGuid = user.guid!!, userToken = user.token!!)
// val jsonPayload = Gson().toJson(payload)
val jsonPayload = String.format(""{"userGuid": "%s"," + ""userToken": "%s"" + "}"",user.guid,user.token)
// Log.d("ZI",jsonPayload)

输出——示例

"{"userGuid": "1234","userToken": "token000"}"

在格式化字符串时,可以在:之后删除space

val jsonPayload = String.format(""{"userGuid":"%s"," + ""userToken":"%s"" + "}"",user.guid,user.token)

输出——

"{"userGuid":"1234","userToken":"token000"}"

我还不完全明白为什么,但是这个问题给了我答案,让它工作:

从套接字发送JSON数据。IO from android

val jsonPayload = Gson().toJson(payload)
val jsonObj = JSONObject(jsonPayload)
this.socketService.socket.emit(EndpointsEnum.AppLoadUser, jsonObj)

在创建jsonObj之后,服务器现在有一个可以使用的正确形成的JSON对象。