首页 文章

java json:如何从包含对象数组的json对象中获取元素{[{},{}]}

提问于
浏览
-1

需要一些java json的帮助 . 大家好!我需要按歌曲 Headers 对数据进行排序,并提供特殊情况的处理 . 我需要编写从json文件中排序数据的方法 . 例如,此方法还必须能够使用相同的字段对数据进行排序 . 解析此文件有效 . 但它有一个结构:

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

我现在不知道如何从对象Array中获取任何元素 . 例如,当我尝试执行:.getSongName()时,我得到“null” .

我有类带字符串groupName的类; String songName;和双歌;所有的geters和seters . 还有JsonParser类和解析方法 . 和MusicAlbum类一起列出专辑 . 还有主要课程:

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

我不知道,该做什么以及如何编写数据恢复方法 .

感谢您对此方法的任何帮助!

2 回答

  • 0

    您没有向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);
    }
    
  • 0

    好的,如果没有关于 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());
        }
    }
    

    这基本上是伪代码,它不会编译,只是为了给你一个想法 .

相关问题