首页 > 解决方案 > 如何解析 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)

标签: androidjson

解决方案


如果您已经知道数据的预期结构,我建议使用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
)

请注意,我使用了valand not var,因此请确保您已将 GSON 配置为允许对最终字段进行序列化。


推荐阅读