2013-10-28 2 views
0

Я пытаюсь разобрать ответ от сервера что-то вроде этогоПолучение значения из ответов Json, который имеет «» вокруг параметры

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

} 

} 

В то, что я изначально делал я получаю идентификатор задачи утратившим но в этом коде, который я написал выше, чтобы попытаться понять проблему, Eclipse дает ошибку в ответе строки, он не признает, что это правильная строка. Пожалуйста, убедитесь, что я не могу изменить строку ответа, поскольку она исходит от сервера. Любая помощь любого рода или любые ссылки для устранения ошибки будут высоко оценены. Thanx в Advance.

+1

Если вы объявляете String в Java для целей тестирования, вам нужно избежать двойных кавычек внутри строки с использованием обратного слэша, поэтому '\' '. –

+1

Кроме того, я не знаком с Gson (I у меня никогда не было случая работать с JSON на Java), но я не понимаю, как он должен знать, что делать с объявленным в вашем ответе свойством 'task'. –

+0

Не использовал бы' '' в JSON быть более удобным? – mabi

ответ

1

Gson будет пытаться сопоставьте строку JSON с структурой вашего класса.

Поскольку ваш JSON начинается с task : { ... }, он попытается найти недвижимость task по классу TaskResponse. Поскольку нет такого поля, он ничего не установит на вашем экземпляре.

Так как преобразовать его в более общем плане (например, с использованием Map.class в качестве мишени) или добавить task свойство класса-оболочки:

class TaskResponse { 
    private Task task; 
} 

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

class Link { 
    String href; 
} 

Там также третий вариант подробно в this answer.

+0

Отлично, Thanx чувак. –

1

внутри строки "не может непосредственно быть использовать

и нужно, чтобы избежать его, заменив его на \"

"===> \"

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

Так что мне нужно перебирать всю строку, которую я получаю с сервера, и заменить «с помощью», это то, что вы пытаетесь сказать? –

+0

, если вы передаете значение внутри своей строки статически, тогда да, вам нужно избежать всего «символа –

+0

: не говоря об этом SSCCE, в том, что я изначально делаю, ответ приходит с сервера, и там он не дает ошибок в string, но он просто в конце дает мне идентификатор задачи как null. –

Смежные вопросы