0

我正在尝试解析来自服务器的响应,如下所示

public class TestClass {
public class TaskResponse {

        private String id;
        private List<String> links;
        public String getId(){

            return id;

            }  
      }

public static void main(String args[]){


       String response = "{
 "task": {
  "id": 10, 
  "links": [
   {
    "href": "http://localhost:9000/v1/115e4ad38aef463e8f99991baad1f809/os-hosts/svs144/onboard/10"
   }
  ]
 }
}";

JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(response).getAsJsonObject();
Gson gson = new Gson();
TaskResponse tskResponse = gson.fromJson(response, TaskResponse.class);
String taskId = tskResponse.getId();
System.out.println("The task Id is "+taskId);

}

}

在我最初做的事情中,我将任务 ID 设为 null,但在我上面编写的这段代码中,Eclipse 在字符串响应中给出了错误,它无法识别它是一个正确的字符串。请注意我无法更改来自服务器的响应字符串。任何帮助或解决错误的任何链接都将受到高度赞赏。提前感谢。

4

2 回答 2

1

Gson 将尝试将 JSON 字符串与您的班级结构相匹配。

由于您的 JSON 以它开头,task : { ... }它将尝试task在 class 上查找属性TaskResponse。由于没有这样的字段,它不会在您的实例上设置任何内容。

因此,要么更一般地转换它(例如,Map.class用作目标),要么将task属性添加到包装类:

class TaskResponse {
    private Task task;
}

class Task {
    private Long id;
    private List<Link> links;
}

class Link {
    String href;
}

此答案中还详细介绍了第三个选项。

于 2013-10-28T11:39:24.790 回答
1

里面的字符串 " 不能直接使用

您需要通过将其替换为 \" 来逃避它

" ===> \"

String response = "{
 \"task\": {
  \"id\": 10, 
  \"links\": [
   {
    \"href\": \"http://`localhost`:9000/v1/115e4ad38aef463e8f99991baad1f809/os-hosts/svs144/onboard/10\"
   }
  ]
 }
}";
于 2013-10-28T10:54:26.313 回答