2 回答

TA貢獻1785條經驗 獲得超8個贊
您發布的 JSON 無效,第 3 行:
"Ankle Recovery" : {
// / \
// this is what you are missing
此工具將幫助您驗證 JSON 結構并對其進行格式化:https : //jsonlint.com/
現在到實際問題。您的 JSON 具有以下結構:
{
"plans": Object,
"status": Boolean,
}
這些都不是字符串( object != string, boolean != string )。
不能映射到這樣的結構,Map<String, String>因為這要求值是字符串。
您將需要創建多個 POJO 來定義您的結構,然后映射到這些,例如:
class Project {
public Map<String,Plan> plans;
public Boolean status;
}
class Plan {
public String StartDate;
public Double Progress;
public List<Task> tasks;
...
}
class Task {
...
}

TA貢獻1869條經驗 獲得超4個贊
免責聲明...
如果可能的話,我總是會使用一個或多個 POJO 進行調查,這些 POJO 可用于表示數據結構。
如果沒有更多信息,就不可能知道像這樣Ankle Recovery的鍵是否穩定,或者它們是否可能會改變。
“A”可能的解決方案
通常,JSON 采用鍵/值對的形式,其中的值可能是另一個 JSON 對象、數組或其他值的列表,因此您“可以”直接處理該結構,例如...
String text = "{\n"
+ " \"plans\":{\n"
+ " \"Ankle Recovery\":{\n"
+ " \"StartDate\":\"09/24/2018\",\n"
+ " \"Progress\":0.6666666666666666,\n"
+ " \"Tasks\":[\n"
+ " {\n"
+ " \"date\":\"10/16/2018\",\n"
+ " \"amount\":200,\n"
+ " \"task\":\"ice ankle for 30 min\",\n"
+ " \"completed\":true,\n"
+ " \"requirementType\":\"steps\"\n"
+ " },\n"
+ " {\n"
+ " \"date\":\"10/17/2018\",\n"
+ " \"amount\":200,\n"
+ " \"task\":\"ice ankle for 30 min\",\n"
+ " \"completed\":true,\n"
+ " \"requirementType\":\"steps\"\n"
+ " },\n"
+ " {\n"
+ " \"date\":\"10/18/2018\",\n"
+ " \"amount\":200,\n"
+ " \"task\":\"ice ankle for 30 min\",\n"
+ " \"completed\":false,\n"
+ " \"requirementType\":\"steps\"\n"
+ " }\n"
+ " ],\n"
+ " \"Username\":\"[email protected]\",\n"
+ " \"Doctor\":\"Mike Michaels\",\n"
+ " \"EndDate\":\"12/24/2018\"\n"
+ " }\n"
+ " },\n"
+ " \"status\":true\n"
+ "}";
Gson gson = new Gson();
Map<String, Object> fromJson = gson.fromJson(text, Map.class);
Map<String, Object> plans = (Map<String, Object>) fromJson.get("plans");
Map<String, Object> recovery = (Map<String, Object>) plans.get("Ankle Recovery");
List<Map<String, Object>> tasks = (List<Map<String, Object>>) recovery.get("Tasks");
for (Map<String, Object> taks : tasks) {
for (Map.Entry<String, Object> entry : taks.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
現在,這會讓你得到...的輸出
date = 10/16/2018
amount = 200.0
task = ice ankle for 30 min
completed = true
requirementType = steps
date = 10/17/2018
amount = 200.0
task = ice ankle for 30 min
completed = true
requirementType = steps
date = 10/18/2018
amount = 200.0
task = ice ankle for 30 min
completed = false
requirementType = steps
話雖如此,您自己的解析可能涉及更多,必須檢查某些鍵是否存在并根據需要采取適當的措施
添加回答
舉報