Gson со сложной Json Android Studio - PullRequest
       7

Gson со сложной Json Android Studio

0 голосов
/ 03 декабря 2018

Мой файл Json

{"code":0,"datas":[{"id":0,"target_id":0},{"id":1,"target_id":0
}................]}

И то, что я написал, это .. // String data;// у данных есть Json как String

JsonParser jsonParser = new JsonParser();
JsonObject object = (JsonObject) jsonParser.parse(data);
JsonArray memberArray = (JsonArray) object.get("datas");
JsonObject object1= (JsonObject) memberArray.get(0);
dataParsed = object1.get("id").getAsString(); 

// требуемая печать 1

И это не работает .. Как я полагаю, что-то другое с обычным Json в Интернете.Я подумал «код»: 0 - это проблема, которую я хочу знать, как разделить этот код / ​​данные json и получить идентификатор и целевой идентификатор String

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Ваш JSON содержит целое число («код») плюс массив.сам массив содержит несколько объектов JSON.Сначала извлеките объект JSON и массив, затем извлеките объекты JSON из массива.Мое решение для хранения этих данных основано на объектно-ориентированном программировании.Создайте объект Java с двумя переменными с именем DataObject.Целое число для "code" и список другого Java-объекта с именем IdPair для хранения "id" и "target_id".Сначала определите классы.Класс объекта IdPair:

public class IdPair {
    int id;
    int target_id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getTarget_id() {
        return target_id;
    }

    public void setTarget_id(int target_id) {
        this.target_id = target_id;
    }
}

Класс DataObject:

public class DataObject {

    private int code;
    private List<IdPair> idPairs;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List<IdPair> getIdPairs() {
        return idPairs;
    }

    public void setIdPairs(List<IdPair> idPairs) {
        this.idPairs = idPairs;
    }
}

, затем начните извлекать данные из вашего json:

DataObject dataObject = new dataObject(); // init object

JSONObject jsonObject = new JSONObject(data); // whole json is an object! (data is your json)

int code = jsonObject.optInt("code"); // get code from main json

dataObject.setCode(code); // set code to our object

List<IdPair> pairs = new ArrayList<>(); // init list of id pairs

JSONArray datas = jsonObject.optJSONArray("datas"); // get json array from main json

IdPair pair = null; // define idPairs object 

for (int i=0; i<datas.length() ; i++){ // jasonArray loop

    JSONObject object = new JSONObject(datas(i)); // each jsonObject in the jsonArray

    pair = new IdPair();// init idPair

    int id = object.optInt("id"); // get the object id 
    int targetId = object.optInt("target_id"); // get the object target_id 

    // set values to our object
    pair.setId(id); 
    pair.setTarget_id(targetId);
    //add object to list
    pairs.add(pair);
}
// your dataObject is now filled with JSON data

Примечание: это общее решение.Например, вы можете использовать HashMap вместо IdPair объекта.

0 голосов
/ 04 декабря 2018

Здесь вы можете сделать следующий код для получения значений id и target_id из вашего json:

JsonParser jsonParser = new JsonParser();
JsonObject object = (JsonObject) jsonParser.parse(new String(Files.readAllBytes(Paths.get("test.json"))));
JsonArray memberArray = (JsonArray) object.get("datas");

for (JsonElement jsonElement : memberArray) {
    System.out.println(
            String.format("Id : %d TId: %d", 
                    jsonElement.getAsJsonObject().get("id").getAsInt(), 
                    jsonElement.getAsJsonObject().get("target_id").getAsInt()));
}

Вывод:

Id : 0 TId: 0
Id : 1 TId: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...