【发布时间】:2018-11-04 23:17:56
【问题描述】:
我有一个字符串对象,表示为网络任务返回的 json 对象。我需要将其转换为 Map(或 HashMap)。我一直在使用gson,但它一直不成功。这是json字符串(请原谅缩进,因为我必须手动添加换行符):
{
"plans":{
"Ankle Recovery":{
"StartDate":"09/24/2018",
"Progress":0.6666666666666666,
"Tasks":[
{
"date":"10/16/2018",
"amount":200,
"task":"ice ankle for 30 min",
"completed":true,
"requirementType":"steps"},
{
"date":"10/17/2018",
"amount":200,
"task":"ice ankle for 30 min",
"completed":true,
"requirementType":"steps"
},
{
"date":"10/18/2018",
"amount":200,
"task":"ice ankle for 30 min",
"completed":false,
"requirementType":"steps"
}
],
"Username":"email@site.com",
"Doctor":"Mike Michaels",
"EndDate":"12/24/2018"}},
"status":true
}
这是我用来进行转换的代码:
private Map<String, String> plans;
plans = new Gson().fromJson(result, new TypeToken<Map<String, String>>() {}.getType());
既没有也没有奏效。我在 Stack Overflow 上尝试了一些不同的解决方案,但到目前为止都没有成功。
我也抛出了一个我不太明白的异常:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 11
(第 11 列就在“AnkleRecovery”中的第一个引号之前)
如果可能的话,我想使用简单的 gson 来完成这项工作。但我对替代解决方案持开放态度。
【问题讨论】:
-
部分问题是,您的 JSON 不是
Map<String, String>的格式,它还有一个值列表。就个人而言,我会设计一个反映结构的 POJO,但这就是我。可以试试Map<String, Object>吗? -
另外,您发布的 JSON 无效 -
"Ankle Recovery"{是错误的 - 一旦我更正了,我可以将其解析为Map<String, Object> -
@MadProgrammer 你做了什么来纠正 JSON?
-
"Ankle Recovery"{必须是"Ankle Recovery": {- 我经常做的第一件事就是将文本放入 JSON 格式化程序/验证器;) -
@MadProgrammer 我明白了。另一个问题——当你拿到你的地图时,你能看到什么键?我只有计划和状态。我也需要嵌套值(“踝关节恢复”是我目前感兴趣的)。我怎样才能收集到这些