Парсинг JSON

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
tmp
Сообщения: 3
Зарегистрирован: 08 ноя 2014, 18:29

Парсинг JSON

Сообщение tmp » 08 ноя 2014, 18:32

Всем привет!

Помогите, пожалуйста, розпарсить такую запись:

Код: Выделить всё

{"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

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Парсинг JSON

Сообщение doter.ua » 08 ноя 2014, 18:53

http://jsonviewer.stack.hu/ кидаешь джейсон, во второй вкладке смотришь структуру.
P.S. массивы в квадратных брекетах или я что-то пропустил? у тебя только объекты. Пример "myMassiv": [{},{},{}]
UPDATE: более полный пример:

Код: Выделить всё

{"employees":[
    {"firstName":"John", "lastName":"Doe"}, 
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]}
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

tmp
Сообщения: 3
Зарегистрирован: 08 ноя 2014, 18:29

Re: Парсинг JSON

Сообщение tmp » 08 ноя 2014, 19:45

doter.ua писал(а):http://jsonviewer.stack.hu/ кидаешь джейсон, во второй вкладке смотришь структуру.
...
Это скорее не массив а набор данных, и я понятия не имею так получить доступ к тому что внутри.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Парсинг JSON

Сообщение altwin » 09 ноя 2014, 20:25

tmp писал(а):
doter.ua писал(а):http://jsonviewer.stack.hu/ кидаешь джейсон, во второй вкладке смотришь структуру.
...
Это скорее не массив а набор данных, и я понятия не имею так получить доступ к тому что внутри.
Вообще не в тему если честно... Именно это и говорится в ошибке, что трудно ему и не получается json объект преобразовать в массив... не массив ведь он совсем, так зачем? А набор данных этот именно json -ом и называется и работать с ним нужно соотвественно.

http://stackoverflow.com/a/9606629/2611075
Изображение

ihitmani
Сообщения: 8
Зарегистрирован: 26 ноя 2014, 01:04

Re: Парсинг JSON

Сообщение ihitmani » 26 ноя 2014, 01:08

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

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Парсинг JSON

Сообщение doter.ua » 26 ноя 2014, 11:11

Изображение
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить