簡體   English   中英

java + json:如何從包含對象數組{[{},{}]}的json對象中獲取元素

[英]java+json: how to get an element from a json object that contains an array of objects {[ {},{} ]}

需要有關Java + json的幫助。 大家好! 我需要按歌曲標題對數據進行排序,並提供特殊情況的處理。 我需要編寫對json文件中的數據進行排序的方法。 例如,此方法還必須能夠對具有相同字段的數據進行排序。 該文件的解析有效。 但是它具有如下結構:

{
    "musicAlbum": [
        {
            "groupname": "twenty one pilots",
            "songduration": 3.27,
            "songname": "Heathens"
        },
        {
            "groupname": "twenty one pilots",
            "songduration": 4.4,
            "songname": "Car Radio"
        },
        {
            "groupname": "Linkin Park",
            "songduration": 3.06,
            "songname": "Numb"
        }
    ]
}

而且我現在不知道如何從對象數組中獲取任何元素。 例如,當我嘗試做:.getSongName()時,我得到“空”。

我有帶字符串groupName的類Record; 字符串songName; 和double songDuration; 所有獲取器和設置器。 另外JsonParser類具有解析方法。 和MusicAlbum類一起使用List專輯。 並與主類:

import java.io.IOException;
import java.util.List;

public class App {
public static void main(String[] args) throws IOException // exception to be 
handled
{
    List<Record> album = JsonParser.parseJson();
    System.out.println(album); 

    for (int i = 0; i < album.size(); i++) {
        System.out.println(album.get(i));
    }
    Record songName = new Record();
    System.out.println(songName); 
    System.out.println(songName.getSongName());

}
}

我現在在控制台中擁有什么:

[MusicAlbum [album=[Record [groupName=twenty one pilots, songName=Heathens, songDuration=3.27] , Record [groupName=twenty one pilots, songName=Car Radio, songDuration=4.4] , Record [groupName=Linkin Park, songName=Numb, songDuration=3.06] , Record [groupName=Lana Del Rey, songName=Summertime sadness, songDuration=3.56] , Record [groupName=Imagine Dragons, songName=Thunder, songDuration=3.24] , Record [groupName=Three Days Grace, songName=Outsider, songDuration=2.43] , Record [groupName=ONUKA, songName=When I Met You, songDuration=4.04] , Record [groupName=Foster The People, songName=Best Friend, songDuration=4.25] , Record [groupName=Massive Attack, songName=Angel, songDuration=6.18] , Record [groupName=Florence + The Machine, songName=Big God, songDuration=4.28] , Record [groupName=Die antwoord, songName=banana brain, songDuration=7.12] , Record [groupName=Coldplay, songName=Hypnotised, songDuration=5.54] ]]]

MusicAlbum [album=[Record [groupName=twenty one pilots, songName=Heathens, songDuration=3.27] , Record [groupName=twenty one pilots, songName=Car Radio, songDuration=4.4] , Record [groupName=Linkin Park, songName=Numb, songDuration=3.06] , Record [groupName=Lana Del Rey, songName=Summertime sadness, songDuration=3.56] , Record [groupName=Imagine Dragons, songName=Thunder, songDuration=3.24] , Record [groupName=Three Days Grace, songName=Outsider, songDuration=2.43] , Record [groupName=ONUKA, songName=When I Met You, songDuration=4.04] , Record [groupName=Foster The People, songName=Best Friend, songDuration=4.25] , Record [groupName=Massive Attack, songName=Angel, songDuration=6.18] , Record [groupName=Florence + The Machine, songName=Big God, songDuration=4.28] , Record [groupName=Die antwoord, songName=banana brain, songDuration=7.12] , Record [groupName=Coldplay, songName=Hypnotised, songDuration=5.54] ]]

Record [groupName=null, songName=null, songDuration=0.0] 

null

而且我不知道該怎么做以及如何編寫數據接收方法。

感謝您使用此方法的幫助!

您沒有將任何值添加到songName對象:

Record songName = new Record(); // you should add values to "songName" object
System.out.println(songName); 
System.out.println(songName.getSongName());

因此,一切都為空。 嘗試做這樣的事情:

將您的響應“ musicAlbum”添加到JSONArray對象,然后遍歷該數組並獲取每條記錄。

List<Record> records = new ArrayList<>();
Record record = new Record();

for (int i=0;i<jsonArray.length();i++) {
    JSONObject jObj = jsonArray.getJSONObject(i);

    record.setGroupName = jObj.getString("groupname");
    record.setSongName = jObj.getString("songname");
    record.setSongDuration = jObj.getString("songduration");

    records.add(record);
}

好的,如果沒有有關Record類和解析器的更多詳細信息,我只能進行一些反向工程。

這就是您的數據的樣子。

MusicAlbum [
    album= [
        Record [groupName=twenty one pilots, songName=Heathens, songDuration=3.27] ,
        Record [groupName=twenty one pilots, songName=Car Radio, songDuration=4.4] ,
        Record [groupName=Linkin Park, songName=Numb, songDuration=3.06] ,
        Record [groupName=Lana Del Rey, songName=Summertime sadness, songDuration=3.56] ,
        Record [groupName=Imagine Dragons, songName=Thunder, songDuration=3.24] ,
        Record [groupName=Three Days Grace, songName=Outsider, songDuration=2.43] ,
        Record [groupName=ONUKA, songName=When I Met You, songDuration=4.04] ,
        Record [groupName=Foster The People, songName=Best Friend, songDuration=4.25] ,
        Record [groupName=Massive Attack, songName=Angel, songDuration=6.18] ,
        Record [groupName=Florence + The Machine, songName=Big God, songDuration=4.28] ,
        Record [groupName=Die antwoord, songName=banana brain, songDuration=7.12] , Record [groupName=Coldplay, songName=Hypnotised, songDuration=5.54]
    ]
]

MusicAlbum有一個records數組,每個記錄都有一些字段, songName是其中之一。

因此,獲取記錄詳細信息的總體算法將如下所示:

List<Album> albums = parseJson("{...}");
for (Album album : albums) {
    // 'album' is a bad name here, it's storing records, not albums
    List<Record> records = album.getAlbum();
    for (Record record : records) {
        System.out.println(record.getSonName());
    }
}

這個基本上是偽代碼,不會編譯,只是給您一個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM