Java 从Json响应中获取一个值,该响应包含&引用;围绕参数
我试图解析来自服务器的响应,类似这样Java 从Json响应中获取一个值,该响应包含&引用;围绕参数,java,json,gson,Java,Json,Gson,我试图解析来自服务器的响应,类似这样 public class TestClass { public class TaskResponse { private String id; private List<String> links; public String getId(){ return id; } } public static void main(Str
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);
}
}
公共类TestClass{
公共类任务响应{
私有字符串id;
私人列表链接;
公共字符串getId(){
返回id;
}
}
公共静态void main(字符串参数[]){
字符串响应=”{
“任务”:{
“id”:10,
“链接”:[
{
“href”:”http://localhost:9000/v1/115e4ad38aef463e8f99991baad1f809/os-主机/svs144/车载/10“
}
]
}
}";
JsonParser=新的JsonParser();
JsonObject obj=parser.parse(response.getAsJsonObject();
Gson Gson=新的Gson();
TaskResponse tskResponse=gson.fromJson(response,TaskResponse.class);
字符串taskId=tskResponse.getId();
System.out.println(“任务Id为”+taskId);
}
}
在我最初所做的工作中,我得到的任务id为null,但在我上面为尝试理解问题而编写的代码中,Eclipse在字符串响应中给出了错误,它无法识别它是正确的字符串。
请注意,我不能更改响应字符串,因为它来自服务器。任何类型的帮助或任何链接,以整理错误将不胜感激。
Thanx提前。内字符串“不能直接使用”
您需要将其替换为\“
“==>\”
Gson将尝试将JSON字符串与类的结构相匹配 由于JSON以
task:{…}
开头,它将尝试在类TaskResponse
上查找属性task
。因为没有这样的字段,所以它不会在您的实例上设置任何内容
因此,或者更一般地转换它(例如,使用Map.class
作为目标),或者将task
属性添加到包装类:
class TaskResponse {
private Task task;
}
class Task {
private Long id;
private List<Link> links;
}
class Link {
String href;
}
类任务响应{
私人任务;
}
课堂任务{
私人长id;
私人列表链接;
}
类链接{
字符串href;
}
还有第三个选项在中详细介绍。如果为了测试目的而在Java中声明字符串,则需要使用反斜杠转义字符串中的双引号,因此
\“
。此外,我对Gson不熟悉(我从来没有机会在Java中使用JSON),但我不知道它如何知道如何处理您的响应中声明的任务属性。在JSON中使用'
不是更方便吗?@mabi:响应来自服务器。我无法更改。Anthony:哪个任务属性??@MAD_ABOUT_JAVA,
和“
是等效的,因此,您可以在测试代码中使用“
来简化。因此,我需要迭代从服务器获取的整个字符串,并将“替换为\”,这就是您想要说的吗?如果您静态地在字符串中传递值,那么是的,您必须转义所有字符串“character:不是说这个SSCCE,在我最初做的事情中,响应来自一个服务器,在那里它没有在字符串中给出错误,但它只是在最后给我任务id为null。这是一个简单的解析错误,你需要获取JSON对象,通过其id名称获取元素,然后打印其值字符串taskId=tskResponse.getId();我不能理解这个错误,你能告诉我我在解析过程中犯了什么错误吗?太好了。唐克斯,伙计。
class TaskResponse {
private Task task;
}
class Task {
private Long id;
private List<Link> links;
}
class Link {
String href;
}