Страница 1 из 1
Парсинг JSON
Добавлено: 08 ноя 2014, 18:32
tmp
Всем привет!
Помогите, пожалуйста, розпарсить такую запись:
Код: Выделить всё
{"stts":{"s":1,"td":{"cid":"72345","zn":"njiw"},"st":true}}
Нужно получить доступ ко всем элементам. Как это можно сделать?
Уже два дня мучаюсь с JSONObject и getJSONArray:
Код: Выделить всё
//response - строка ответа сервера
private JSONObject json;
private JSONArray values;
json = new JSONObject(response); //Тут все ок
values = json.getJSONArray("stts");//А тут ловлю краш
Лог:
Код: Выделить всё
11-07 17:19:15.491: W/System.err(271): org.json.JSONException: Value {"s":1,"td":{"cid":"72345","zn":"njiw"},"st":true} at s of type org.json.JSONObject cannot be converted to JSONArray
Re: Парсинг JSON
Добавлено: 08 ноя 2014, 18:53
doter.ua
http://jsonviewer.stack.hu/ кидаешь джейсон, во второй вкладке смотришь структуру.
P.S. массивы в квадратных брекетах или я что-то пропустил? у тебя только объекты. Пример "myMassiv": [{},{},{}]
UPDATE: более полный пример:
Код: Выделить всё
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
Re: Парсинг JSON
Добавлено: 08 ноя 2014, 19:45
tmp
Это скорее не массив а набор данных, и я понятия не имею так получить доступ к тому что внутри.
Re: Парсинг JSON
Добавлено: 09 ноя 2014, 20:25
altwin
tmp писал(а):
Это скорее не массив а набор данных, и я понятия не имею так получить доступ к тому что внутри.
Вообще не в тему если честно... Именно это и говорится в ошибке, что трудно ему и не получается json объект преобразовать в массив... не массив ведь он совсем, так зачем? А набор данных этот именно json -ом и называется и работать с ним нужно соотвественно.
http://stackoverflow.com/a/9606629/2611075
Re: Парсинг JSON
Добавлено: 26 ноя 2014, 01:08
ihitmani
tmp писал(а):Всем привет!
Помогите, пожалуйста, розпарсить такую запись:
Код: Выделить всё
{"stts":{"s":1,"td":{"cid":"72345","zn":"njiw"},"st":true}}
Нужно получить доступ ко всем элементам. Как это можно сделать?
Уже два дня мучаюсь с JSONObject и getJSONArray:
Код: Выделить всё
//response - строка ответа сервера
private JSONObject json;
private JSONArray values;
json = new JSONObject(response); //Тут все ок
values = json.getJSONArray("stts");//А тут ловлю краш
Лог:
Код: Выделить всё
11-07 17:19:15.491: W/System.err(271): org.json.JSONException: Value {"s":1,"td":{"cid":"72345","zn":"njiw"},"st":true} at s of type org.json.JSONObject cannot be converted to JSONArray
Я б не заморачивался с ручным парсингом, вот пример парсера который вертает готовый объект, где ResponseDataWrapper класс описывающий логическую структуру json,
Код: Выделить всё
package com.example.myapp.parse;
import com.google.api.client.http.*;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.JsonObjectParser;
import com.google.api.client.json.jackson2.JacksonFactory;
import java.io.IOException;
public class Parser {
static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
static final JsonFactory JSON_FACTORY = new JacksonFactory();
private static final Parser instance = new Parser();
private Parser() {
}
static final HttpRequestFactory requestFactory =
HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) {
request.setParser(new JsonObjectParser(JSON_FACTORY));
}
});
public ResponseDataWrapper parse(String inUrl) throws IOException {
GenericUrl url = new GenericUrl(inUrl);
HttpRequest request = null;
try {
request = requestFactory.buildGetRequest(url);
} catch (IOException e) {
e.printStackTrace();
}
return parseResponse(request.execute());
}
private ResponseDataWrapper parseResponse(HttpResponse response) throws IOException {
return response.parseAs(ResponseDataWrapper.class);
}
public static Parser getInstance() {
return instance;
}
}
модель (можно не описывать иерархию полностью, влияет на производительность)
Код: Выделить всё
package com.example.myapp.parse;
import com.google.api.client.util.Key;
public class ResponseDataWrapper {
@Key
private ResponseData responseData;
/* @Key
private Object responseDetails;
@Key
private int responseStatus;*/
public ResponseData getResponseData() {
return responseData;
}
public void setResponseData(ResponseData responseData) {
this.responseData = responseData;
}
/* public Object getResponseDetails() {
return responseDetails;
}
public void setResponseDetails(Object responseDetails) {
this.responseDetails = responseDetails;
}
public int getResponseStatus() {
return responseStatus;
}
public void setResponseStatus(int responseStatus) {
this.responseStatus = responseStatus;
}*/
}
Код: Выделить всё
package com.example.myapp.parse;
import com.google.api.client.util.Key;
import java.util.List;
public class ResponseData {
@Key("results")
private List<Result> responseData;
/* @Key("cursor")
private Cursor cursor;
*/
public List<Result> getResponseData() {
return responseData;
}
public void setResponseData(List<Result> responseData) {
this.responseData = responseData;
}
/* public Cursor getCursor() {
return cursor;
}
public void setCursor(Cursor cursor) {
this.cursor = cursor;
}*/
}
Я короч веду к этому
https://ajax.googleapis.com/ajax/servic ... e&start=62
Re: Парсинг JSON
Добавлено: 26 ноя 2014, 11:11
doter.ua