/**
 * 5 points
 *
 * You will write a method that converts a JSON Object into a Song object. It should assume that the input is in the format:
 * {"title":"Lose Yourself", "artist":"Eminem", "ratings":[5,5,4,5], "youtubeID":"xFYQQPAOz7Y"}
 *
 * @param jsonSong  A song in JSON format
 * @return A Song object with the data from the JSON Value
 */
public static Song jsonToSong(JsonObject jsonSong){
    String title =jsonSong.get("title").asString();
    String YoutubeID =jsonSong.get("youtubeID").asString();
    String artist =jsonSong.get("artist").asString();



    ArrayList<Integer> ratings = new ArrayList<Integer>();

    Song object = new Song(YoutubeID,title,artist,ratings);
    object.setTitle(title);
    object.setArtist(artist);
    object.setRatings(ratings);
    object.setYoutubeID(YoutubeID);


    return object;

Я написал этот код, который преобразует JsonObject в тип Song Object, все преобразуется за исключением массива (рейтинги).

Как правильно получить данные, используя методы получения и установки?

Мои методы установки:

 public ArrayList<Integer> getRatings(){
    return ratings;
}

public void setRatings(ArrayList<Integer> ratings){
    this.ratings = ratings;
}

Конструктор:

   // Constructor
public Song(String youtubeID, String title, String artist, ArrayList<Integer> ratings){
    this.youtubeID = youtubeID;
    this.title = title;
    this.artist = artist;
    this.ratings = ratings;
}

Здесь вы можете видеть, что все конвертируется, кроме рейтинга, когда пробегается через грейдер

    Incorrect on input: {"title":"Comfortably Numb","artist":"Pink Floyd","ratings":[5,4,5,5],"youtubeID":"_FrOQC-zEog"}
Expected output : {title:Comfortably Numb, artist:Pink Floyd, ratings:[5, 4, 5, 5], youtubeID:_FrOQC-zEog}
Your output     : {title:Comfortably Numb, artist:Pink Floyd, ratings:[], youtubeID:_FrOQC-zEog}
Score: 0
0
Gintoki 24 Апр 2017 в 05:59

2 ответа

Лучший ответ
     ArrayList<Integer> ratings = new ArrayList<Integer>(); 
            JsonValue collect = jsonSong.get("ratings"); 
            JsonArray rate = collect.asArray();
            for(int i=0; i<rate.size(); i++){
                ratings.add(rate.get(i).asInt());
            }
0
Gintoki 24 Апр 2017 в 07:06

Не знаю, какую библиотеку Json вы используете, но я предполагаю, что у этого JsonObject есть что-то вроде метода getJsonArray (), вы можете попробовать использовать его для выбора объекта с типом JsonArray, затем выполнить итерацию и получить то, что вы хотите.

Или как то так

        JSONArray ratings= (JSONArray) jsonSong.get("ratings");
        Iterator<Integer> iterator = ratings.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
0
nemo 24 Апр 2017 в 03:20