2012-08-05 10 views
5

में JSON पार्सिंग तो, मैं इस नेस्टेड JSON स्ट्रिंग को पार्स करने के लिए कुछ समय की कोशिश कर रहा हूं। यदि यह नियमित जावा था, या यहां तक ​​कि php, मुझे यकीन है कि यह बहुत पहले किया गया होगा। दुर्भाग्य से मैं इस पर जे 2 एमई के साथ फंस गया हूँ। कुछ खोजों के माध्यम से मैंने पाया कि lone JSON parser से बाहर निकलता है। यह मुझे similar question पर कुछ खुदाई के माध्यम से मिला। मैंने another question पर एक उदाहरण के साथ अपने आप पर कुछ काम करने की कोशिश की है। हालांकि, मुझे अभी भी कुछ कठिनाइयों का सामना करना पड़ रहा है। मैं अब समझाऊंगा।जे 2 एमई

यह JSON स्ट्रिंग मैं पार्स करने के लिए कोशिश कर रहा हूँ है:

{"Result":"Success","Code":"200","CustomerInfo":"{\"clientDisplay\":{\"customerId\":429,\"globalCustNum\":\"0012-000000429\",\"displayName\":\"Hugo Daley\",\"parentCustomerDisplayName\":\"G-KINGSTON\",\"branchId\":12,\"branchName\":\"Bangalore_branch1244724101456\",\"externalId\":\"123000890\",\"customerFormedByDisplayName\":\"New User1244724101456\",\"customerActivationDate\":\"2012-06-17\",\"customerLevelId\":1,\"customerStatusId\":3,\"customerStatusName\":\"Active\",\"trainedDate\":null,\"dateOfBirth\":\"1950-10-10\",\"age\":61,\"governmentId\":\"100000090\",\"clientUnderGroup\":true,\"blackListed\":false,\"loanOfficerId\":17,\"loanOfficerName\":\"New User1244724101456\",\"businessActivities\":null,\"handicapped\":null,\"maritalStatus\":null,\"citizenship\":null,\"ethnicity\":null,\"educationLevel\":null,\"povertyStatus\":null,\"numChildren\":null,\"areFamilyDetailsRequired\":false,\"spouseFatherValue\":null,\"spouseFatherName\":null,\"familyDetails\":null},\"customerAccountSummary\":{\"globalAccountNum\":\"001200000001259\",\"nextDueAmount\":\"2128.0\"},\"clientPerformanceHistory\":{\"loanCycleNumber\":0,\"lastLoanAmount\":\"0.0\",\"noOfActiveLoans\":0,\"delinquentPortfolioAmount\":\"0.0\",\"totalSavingsAmount\":\"1750.0\",\"meetingsAttended\":0,\"meetingsMissed\":0,\"loanCycleCounters\":[],\"delinquentPortfolioAmountInvalid\":false},\"address\":{\"displayAddress\":null,\"city\":\"\",\"state\":\"\",\"zip\":\"\",\"country\":\"\",\"phoneNumber\":\"\"},\"recentCustomerNotes\":[{\"commentDate\":\"2012-06-17\",\"comment\":\"appr\",\"personnelName\":\"New User1244724101456\"}],\"customerFlags\":[],\"loanAccountsInUse\":[{\"globalAccountNum\":\"001200000001262\",\"prdOfferingName\":\"Hawker Loan\",\"accountStateId\":3,\"accountStateName\":\"Application Approved\",\"outstandingBalance\":\"15643.0\",\"totalAmountDue\":\"8977.0\"},{\"globalAccountNum\":\"001200000001279\",\"prdOfferingName\":\"Hazina Micro Loan\",\"accountStateId\":2,\"accountStateName\":\"Application Pending Approval\",\"outstandingBalance\":\"6439.0\",\"totalAmountDue\":\"1716.0\"},{\"globalAccountNum\":\"001200000001280\",\"prdOfferingName\":\"Car Finance\",\"accountStateId\":3,\"accountStateName\":\"Application Approved\",\"outstandingBalance\":\"381.5\",\"totalAmountDue\":\"120.0\"}],\"savingsAccountsInUse\":[{\"globalAccountNum\":\"001200000001260\",\"prdOfferingName\":\"Current Account\",\"accountStateId\":16,\"accountStateName\":\"Active\",\"savingsBalance\":\"1750.0\",\"prdOfferingId\":null}],\"customerMeeting\":{\"meetingSchedule\":\"Recur every 1 Week(s) on Monday\",\"meetingPlace\":\"KINGSTON\"},\"activeSurveys\":false,\"customerSurveys\":[],\"closedLoanAccounts\":[{\"globalAccountNum\":\"001200000001261\",\"prdOfferingName\":\"AUTO LOAN-2\",\"accountStateId\":10,\"accountStateName\":\"Cancel\",\"outstandingBalance\":\"2576.0\",\"totalAmountDue\":\"206.0\"}],\"closedSavingsAccounts\":[]}"} 

चिंता मत करो यह सिर्फ नमूना डेटा है, कुछ भी नहीं यहाँ असली।

अब मुझे ग्राहक संख्या, नाम, पता, और बचत खाता शेष की आवश्यकता है। यह वह कोड है जिसका मैंने इसे पार्स करने के लिए उपयोग किया है:

public CustomerInfo(String jsonTxt) { 
try { 
    JSONObject json = new JSONObject(jsonTxt); 
     JSONObject customer = json.getJSONObject("CustomerInfo"); 
    custNo = json.getString("globalCustNum"); 
    custName = json.getString("displayName"); 
    address = json.getString("DisplayAddress"); 
    savAcctBal = json.getDouble("totalSavingsAmount"); 
} catch (final JSONException je) { 
     je.printStackTrace(); 
} 
} 

यह निश्चित रूप से एक JSONException फेंकता है। मैंने सीखा है कि JSON लाइब्रेरी में कुछ कीड़े हो सकती हैं। मैंने प्रिंट स्टेटमेंट के साथ कुछ चालें की हैं। यह पता चला है कि यह JSON स्ट्रिंग के पहले तत्व का उपभोग करना पसंद करता है। यह घोंसला वाले तत्वों के माध्यम से जा रहा है जैसे कि हम यहां उदाहरण में हैं।

क्या कोई विकल्प है जिसका मैं उपयोग कर सकता हूं?

उत्तर

4

लड़के निम्न उदाहरण से JSON स्ट्रिंग पार्स, मैं अपने आप को शूट करने के लिए चाहते हो सकता है। बिस्तर पर जाने से पहले मैंने अपनी समस्या का पता लगाया। मेरा दृष्टिकोण सही था; प्रिंट प्रिंट स्टेटमेंट के आउटपुट को पढ़ने के साथ-साथ यह अनुमान लगाया गया कि जेएसओएन कितना घोंसला था।

आंतरिक रूप से, JSONOBject क्लास हैशटेबल में JSON तत्वों, जोड़ों आदि को संग्रहीत करता है। हैशटेबल का दुष्प्रभाव है जहां यह उस डेटा को सॉर्ट करेगा जो इसे दिया गया है। यह निश्चित रूप से कैसे JSON आदेश दिया गया था के माध्यम से। मुझे लगा कि यह जेएसओएन के कुछ हिस्सों का उपभोग कर रहा था, जबकि यह वास्तव में उन्हें वापस पीछे रख रहा था ... अगर जेएसओएन का अंत नहीं है तो वापस लौटाएं। यह मेरे माध्यम से बहुत दूर है। मुझे तब तक इसका एहसास नहीं हुआ जब तक कि मैं सिर्फ हैशटेबल पर स्ट्रिंग नहीं कर रहा था। मुझे तब भी एहसास हुआ कि जेएसओएन वास्तव में मेरे विचार से ज्यादा घोंसला था। चार हिस्सों को मैं प्राप्त करना चाहता था, जहां 3 अलग-अलग नेस्टेड JSON ऑब्जेक्ट्स में।

इस प्रकार, मेरा समाधान खुद को और भी दुःख बचाने के लिए था और बस JSON को एक सुंदर प्रिंटर के माध्यम से रखा और देखा और संरचना ठीक से।

public CustomerInfo(String jsonTxt) { 
try { 
    JSONObject json = new JSONObject(jsonTxt); 
     JSONObject customer = new JSONObject(json.getString("CustomerInfo")); 
     JSONObject client = new JSONObject(customer.getString("clientDisplay")); 
     custNo = client.getString("globalCustNum"); 
    custName = client.getString("displayName"); 
     JSONObject cph = new JSONObject(customer.getString("clientPerformanceHistory")); 
     JSONObject caddress = new JSONObject(customer.getString("address")); 
    address = caddress.getString("displayAddress"); 
    savAcctBal = cph.getDouble("totalSavingsAmount"); 
} catch (final JSONException je) { 
     je.printStackTrace(); 
} 
} 

Protip::

यहाँ मेरी समाधान कोड है हमेशा अपने JSON पर एक सुंदर प्रिंटर का उपयोग, और यह संरचना है इससे पहले कि आप कुछ भी कर सराहना करते हैं। मैं कसम खाता हूँ कि यह मेरे साथ फिर से नहीं होगा।

+0

यदि उत्तर आपके लिए काम करता है, तो इसे स्वीकार के रूप में चिह्नित करें ताकि यह उन लोगों की सहायता कर सके जो एक ही चीज़ की खोज करते हैं। :) – Spudley

+0

हाँ, यह वास्तव में मुझे थोड़ी देर के लिए बेवकूफ की तरह लग रहा था। मैं इसे स्वीकार करूंगा जब यह मुझे अनुमति देगा। बहुत बहुत धन्यवाद दोस्तों! :) –

+0

क्या आपके पास अभी भी जार फ़ाइल है? मुझे जेसन-मी जार कहीं भी नहीं मिला: एस – eddy

0

आप

public CustomerInfo(String jsonTxt) { 
    try { 
     JSONObject json= (JSONObject) new JSONTokener(jsonTxt).nextValue(); 
     test = (String) json2.get("displayName"); 
    } 
    catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

बहुत धन्यवाद, मैं जो कोशिश कर रहा था उससे साफ दिखता है। मुझे लगता है कि मैंने समस्या हल कर ली है। यह मुझे और अधिक था, जेएसओएन संरचना सही नहीं पढ़ रहा था। –

संबंधित मुद्दे