जावा + जेसन के साथ कुछ मदद चाहिए। सभी को नमस्कार! मुझे गीत शीर्षक से डेटा सॉर्ट करने और असाधारण स्थितियों की प्रोसेसिंग प्रदान करने की आवश्यकता है। मुझे वह विधि लिखनी है जो डेटा को 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"
        }
    ]
}

और अब मैं नहीं जानता कि वस्तुओं से कोई तत्व कैसे प्राप्त करें Array. उदाहरण के लिए जब मैं ऐसा करने का प्रयास करता हूं: .getSongName (), मुझे "शून्य" मिलता है।

मेरे पास स्ट्रिंग ग्रुपनाम के साथ क्लास रिकॉर्ड है; स्ट्रिंग गीतनाम; और दोहरा गीतअवधि; सभी गेटर्स और सेटर्स। पार्सिंग विधि के साथ 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

और मुझे नहीं पता कि डेटा प्राप्त करने के लिए क्या करना है और कैसे एक विधि लिखना है।

इस विधि में किसी भी मदद के लिए धन्यवाद!

1
YanaKit 8 पद 2018, 23:01

2 जवाब

सबसे बढ़िया उत्तर

ठीक है, आपकी 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());
    }
}

यह मूल रूप से छद्म कोड है, यह आपको केवल एक विचार देने के लिए संकलित नहीं करेगा।

0
rendon 8 पद 2018, 23:37

आप अपने songName ऑब्जेक्ट में कोई मान नहीं जोड़ रहे हैं:

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

इसलिए सब कुछ शून्य है। ऐसा कुछ करने का प्रयास करें:

JSONArray ऑब्जेक्ट में अपनी प्रतिक्रिया "musicAlbum" जोड़ें, उस सरणी के माध्यम से पुनरावृति करने और प्रत्येक रिकॉर्ड प्राप्त करने के बजाय।

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
Dimness 8 पद 2018, 23:26