2015-10-26 3 views
0

я использовать REST, чтобы получить ресурс URL-адрес, который возвращает строку, следующим образом:Get Rest Api не возвращает правильный формат JSON string?

URL url = new URL(some_url_string); 
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); 
connection.setRequestMethod("GET"); 

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
StringBuffer response = new StringBuffer(); 

String inputLine; 
while ((inputLine = reader.readLine()) != null) { 
    response.append(inputLine); 
} 
reader.close(); 

String s = response.toString(); 

И я стараюсь, чтобы преобразовать его в мой класс:

MyClass temp = new Gson().fromJson(s, MyClass.class); 

где MyClass является:

public class MyClass { 
    @SerializedName("Number") 
    public int number; 

    @SerializedName("Date") 
    public Long date; 
} 

проблема заключается в том, что response.toString() возвращается:

"{\"Number\":2,\"Date\":1444953600}" 

в то время, Gson ожидает строку:

{"Number":2,"Date":1444953600} 

Поскольку response.toString() возвращается вышеуказанную строку с дополнительным " в начале и в конце строки, я получаю следующее исключение:

Вызванный: java.lang.IllegalStateException: ожидаемое BEGIN_OBJECT но СТРОКА в строке 1 колонка 2 путь $

на com.google.gson.stream.JsonReader.beginObject (JsonReader.java:387)

в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read (ReflectiveTypeAdapterFactory.java:210)

ли проблема здесь GET, response.toString() или fromJson()?

+1

Попробуйте установить connection.setRequestProperty ("Content-Type", "приложения/JSON"); будет JsonObject js = новый JSONObject (ответ); вернет правильную строку json? –

+0

'JsonObject js = new JSONObject (response);' не компилируется. –

+0

Извините; Для этого вам нужен JSON lib. :) –

ответ

0

Вы должны использовать то же имя атрибута в своем классе и в своем json. В противном случае вы можете использовать @SerializedName("...") указать другое имя

public class MyClass { 
    @SerializedName("Number") 
    public int number; 

    @SerializedName("Date") 
    public Long date; 
} 
+0

Обновлен мой вопрос. Проблема связана с дополнительным '' '. –

+0

Ваша проблема исходит из вашего запроса (' GET'), который возвращает ответ с дополнительными '' '. – ThomasThiebaud

+0

Это было фактически 'GET', которое возвращало строку вместо JSON. Исправлено это, и мой код Java отлично работает! –

0

Применить эти шаги в строку ответа

String s= response.toString(); 
s = s.trim(); 
s = s.substring(1, s.length()-1); 
s = s.replace("\\", ""); 

или

s .replaceAll("\\\\", ""); 
0

так вот не вопрос ...

просто создайте один темп jsonobject с Строка ответа

Я обновил код

URL url = new URL(some_url_string); 
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); 
connection.setRequestMethod("GET"); 

BufferedReader reader = new BufferedReader(new  InputStreamReader(connection.getInputStream())); 
StringBuffer response = new StringBuffer(); 

String inputLine; 
while ((inputLine = reader.readLine()) != null) { 
    response.append(inputLine); 
} 
reader.close(); 

String s = response.toString(); 
JSONObject sObj=new JSONObject(s); 
// create this object and now pass this to serialize object using GSON 
MyClass temp = new Gson().fromJson(sObj.toString(), MyClass.class); 
Смежные вопросы