我有如下所示的字符串:
{"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)
答案 0 :(得分:1)
如果您已经知道数据的预期结构,则建议使用GSON。您可以在 JSON-Java反序列化的基础部分中找到不错的教程here,其中介绍了如何反序列化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
而不是var
,因此请确保已将GSON配置为允许序列化最终字段。
答案 1 :(得分:0)
您可以使用JSONObject:
HBase is not running.org.apache.hadoop.hbase.MasterNotRunningException: java.io.IOException:
org.apache.zookeeper.KeeperException$ConnectionLossException:
KeeperErrorCode = ConnectionLoss for /hbase/master
注意:您最有可能从REST API请求JSON,但是如果您可能需要对JSON字符串进行硬编码或只是想使用它,那么Kotlin的原始字符串将变得很方便(以三引号开头和结尾) ),因为那样就不必转义单引号了(就像使用反斜杠一样)。
答案 2 :(得分:0)
一旦有了JSON字符串,您就可以使用GSON和jackson之类的外部库为您解析它,或者您可以简单地使用JSONObject
来自己做。
JSONObject object = new JSONObject(jsonString)
现在,您可以使用各种方法轻松获取数据。
例如,要获取字符串值:
String value = object.getString("key")
获取布尔值:
boolean value = object.getBoolean("key")
,依此类推。要了解更多信息,请检查here
PS: 请在发布查询之前先对其进行搜索。您很有可能会发现他们已经回答了。 您可以找到已经回答here的内容。