android - 如何解析 JSON 字符串?
问题描述
我有如下所示的字符串:
{"data":"{\"methodName\":\"matchRequest\",\"arguments\":[{\"matchId\":2963,\"gamerName\":\"pro100_Ocean\",\"gamerId\":\"4c04d9f0-c1e7-410f-8ad8-a95922556bbd\",\"gamerFullName\":null,\"gamerPhotoUrl\":\"data\\\\user\\\\4c04d9f0-c1e7-410f-8ad8-a95922556bbd\\\\profile\\\\cropped3649162562321249118.jpg\",\"gamerRaiting\":1,\"gamerCardScore\":0,\"correctAnswerScore\":50,\"incorrectAnswerScore\":-50,\"isBot\":false,\"myCardScore\":0}],\"identifier\":\"00000000-0000-0000-0000-000000000000\"}"}
我从后端获取文本,我需要获取数据。我该怎么做?
更新
我想使用 Gson,并且我创建了如下所示的 Pojo 类,但我需要将值作为日期键中的字符串,如 json。(也许你不明白我的意思)
data class RequestGameModel (
@SerializedName("messageType")
@Expose
var messageType: Int? = null,
@SerializedName("data")
@Expose
var data: String? = null)
解决方案
如果您已经知道数据的预期结构,我建议使用GSON。您可以在此处找到一个很好的教程,解释如何在JSON-Java 反序列化基础部分中反序列化 JSON 字符串。
String userJson = "{'age':26,'email':'norman@futurestud.io','isDeveloper':true,'name':'Norman'}";
Gson gson = new Gson();
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
对于您的情况,首先确保您的 JSON 字符串格式正确。我认为它应该是这样的:
{
"data": {
"methodName": "matchRequest",
"arguments": [
{
"matchId": 2963,
"gamerName": "pro100_Ocean",
"gamerId": "4c04d9f0-c1e7-410f-8ad8-a95922556bbd",
"gamerFullName": null,
"gamerPhotoUrl": "data\\\\user\\\\4c04d9f0-c1e7-410f-8ad8-a95922556bbd\\\\profile\\\\cropped3649162562321249118.jpg",
"gamerRaiting": 1,
"gamerCardScore": 0,
"correctAnswerScore": 50,
"incorrectAnswerScore": -50,
"isBot": false,
"myCardScore": 0
}
],
"identifier": "00000000-0000-0000-0000-000000000000"
}
}
因此,data
根目录中的键应该是您的模型之一,而不是String
. 一个可能的模型映射如下(我去掉了@SerializedName
和@Expose
注释来强调结构):
data class RequestGameModel(
val `data`: GameModel? = null
)
data class GameModel(
val methodName: String? = null,
val arguments: List<GameArguments>? = null,
val identifier: String? = null
)
data class GameArguments(
val matchId: Int = -1,
val gamerName: String? = null,
val gamerId: String? = null,
val gamerFullName: String? = null,
val gamerPhotoUrl: String? = null,
val gamerRaiting: Int = 0,
val gamerCardScore: Int = 0,
val correctAnswerScore: Int = 0,
val incorrectAnswerScore: Int = 0,
val isBot: Boolean = false,
val myCardScore: Int = 0
)
请注意,我使用了val
and not var
,因此请确保您已将 GSON 配置为允许对最终字段进行序列化。
推荐阅读
- python - 参数不会用于 scikit-learn GridSearchCV 中的自定义估计器
- nginx - Nginx 重定向 IP:PORT 到域名
- javascript - 在中小屏幕设备上隐藏侧边栏
- javascript - 从java脚本随机函数中排除一个数字
- c++ - 如何在成对集合上使用 lower_bound()?
- javascript - 如何使用内容脚本注入车把 js 模板?
- batch-file - 启动 R Flexdashboard 命令行 bat 文件
- ruby-on-rails - 在 Rails 中的某些子域之间共享会话?
- java - java.lang.NoSuchMethodError: javax.servlet.http.Cookie.setHttpOnly(Z)V
- python - 如何在 Python 中通过 Opencv 处理多个图像