Разбор JSON. Строка как массив объектов Json - PullRequest
0 голосов
/ 09 мая 2018

Данный полный вопрос, просто чтобы прояснить любые вопросы:

   /**
 * q1: Write a public class named ColonialFive with private instance variables named "fly" of 
 * type boolean, "blond" of type int, "tragic" of type boolean, and "top" of type String.
 * 
 * Then write a public method inside the Problem Set class named "parseColonialFive" that 
 * takes a String as a parameter and returns an ArrayList of ColonialFive. This method will 
 * parse the input String as a properly formatted Json array of objects where each object 
 * represents the values for the instance of ColonialFive where the keys of each Json object 
 * are the instance variable names and the values are the values to which they should be set. 
 * Return an ArrayList of instances of ColonialFive with the instance variables matching the 
 * values from the Json objects. The order of instances in the ArrayList must match the order 
 * of objects in the Json array
 */

Код, который я имею:

    public class ColonialFive {
    private boolean fly;
    private int blond;
    private boolean tragic;
    private String top;

    public ColonialFive(boolean a, int b, boolean c, String d) {
        this.fly = a;
        this.blond = b;
        this.tragic = c;
        this.top = d;
    }
    public void setFly(boolean a) {
        this.fly = a;
    }
    public void setBlond(int b) {
        this.blond = b;
    }
    public void setTragic(boolean c) {
        this.tragic = c;
    }
    public void setTop(String d) {
        this.top = d;
    }

}

public ArrayList<ColonialFive> parseColonialFive(String a1) {
ArrayList<ColonialFive> data = new ArrayList<ColonialFive>();
JsonValue jsonValue = Json.parse(a1);
JsonArray jsonArray = jsonValue.asArray();

for(int i =0;i<jsonArray.size();i++) {              

    JsonObject thisAble = jsonArray.get(0).asObject();
        boolean a = thisAble.get("fly").asBoolean();

        JsonObject jsonObject2 = jsonArray.get(1).asObject();
        int b = jsonObject2.get("blond").asInt();

        JsonObject civ = jsonArray.get(2).asObject();
        boolean c = civ.get("tragic").asBoolean();

        JsonObject pri = jsonArray.get(3).asObject();
        String d =pri.get("top").asString();

        ColonialFive h = new ColonialFive(a,b,c,d);
        h.setFly(a);
        h.setBlond(b);
        h.setTragic(c);
        h.setTop(d);
        data.add(h);
}
return data;
}

Когда я запускаю код, я не получаю правильные значения для каждой мгновенной переменной. Я не уверен, что может пойти не так, я пытался написать этот код несколькими разными способами.

Я не уверен, должен ли я использовать JsonValue или нет, он должен работать как есть, и другие даже сказали мне об этом

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Просто попробуйте это ...

public ArrayList<ColonialFive> parseColonialFive(String a1) {
    ArrayList<ColonialFive> data = new ArrayList<ColonialFive>();       
    JSONArray jArray = new JSONArray(a1); 
    if (jArray != null) { 
       for (int i=0;i<jArray.length();i++){ 
        Gson gson = new Gson();                     
        ColonialFive col= gson.fromJson(jArray.get(i).toString(), ColonialFive.class);
        data.add(col);
       } 
    } 

    return data;
}


public static void main(String[] args) {
    String a1= "[{\"fly\": true, \"blond\": 42, \"tragic\": false, \"top\": \"Foo\"},{\"fly\": true, \"blond\": 42, \"tragic\": false, \"top\": \"Foo\"}]";
    ArrayList<ColonialFive> data = new ColonialFive().parseColonialFive(a1);

    System.out.println(data);   

}

для этого я использую два файла jar gson-2.2.2.jar и json.jar

0 голосов
/ 21 мая 2018

Вы можете попробовать это:

public ArrayList<ColonialFive> parseColonialFive(String a1) {
    ArrayList<ColonialFive> data = new ArrayList<ColonialFive>();       
    JSONArray jArray = new JSONArray(a1); 
    if (jArray != null) { 
       for (int i=0;i<jArray.length();i++){ 
        Gson gson = new Gson();                     
        ColonialFive col= gson.fromJson(jArray.get(i).toString(), ColonialFive.class);
        data.add(col);
       } 
    } 

    return data;
}
0 голосов
/ 09 мая 2018

Каждый раз вы получаете первый объект.

JsonObject thisAble = jsonArray.get(0).asObject();

Измените 0 на i там.

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