Gson toJson 返回 JSON 字符串而不是 JSON 对象
Posted
技术标签:
【中文标题】Gson toJson 返回 JSON 字符串而不是 JSON 对象【英文标题】:Gson toJson returning string of JSON instead of JSON Object 【发布时间】:2021-11-03 16:25:56 【问题描述】:我与 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 对象。相反,整个事情是一个应该是 JSON 对象的字符串:
""userGuid":"...","userToken":"...""
当服务器接收到它时,它不会像 Web UI 或 Swift App 发送的那样接收 JSON 对象,而是只是一个字符串,而不是转换为 JSON 对象。
【问题讨论】:
你能记录下payload包含的内容吗? JSON 对象是什么意思?与当前发生的情况相比,您的预期输出是多少?你怎么知道它正在发送一个字符串? @DevWithZachary 我可以在 API 端点上设置断点。数据是一个字符串,当它应该是一个对象时。当我通过 Web App 做同样的事情时,它是一个对象,当我从 ios App 做同样的事情时,它也是一个对象。在这种情况下,它作为字符串发送。 【参考方案1】:试试这个,
var jsonString = """"id":1,"description":"Test"""";
var testModel = gson.fromJson(jsonString, TestModel::class.java)
【讨论】:
我不想创建 Java 对象。我想要一个通过网络发送的实际 JSON 对象,而不是 JSON 对象的字符串。【参考方案2】:根据您的要求而不是使用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""
【讨论】:
我有很多 DTO 需要设置为对象。我绝对不想处理字符串插值。【参考方案3】:我还不完全明白为什么,但是这个 SO Question 给了我答案:
Send JSON data from in socket.io from android
val jsonPayload = Gson().toJson(payload)
val jsonObj = JSONObject(jsonPayload)
this.socketService.socket.emit(EndpointsEnum.AppLoadUser, jsonObj)
在创建jsonObj
之后,服务器现在有一个可以使用的格式正确的 JSON 对象。
【讨论】:
以上是关于Gson toJson 返回 JSON 字符串而不是 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章