Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Json响应中获取一个值,该响应包含&引用;围绕参数_Java_Json_Gson - Fatal编程技术网

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;
}