2012-08-05 19 views
5

Bu yuvalanmış JSON dizesini ayrıştırmak için biraz zaman ayırmaya çalışıyorum. Eğer bu normal bir Java, hatta php ise, bunun uzun zaman önce yapılmış olabileceğine eminim. Maalesef bu konuda J2ME ile sıkışıp kaldım. Bazı arama yoluyla, bir lone JSON parser çıktısını buldum. Bu bir similar question üzerinde bazı kazma yoluyla bulundu. another question'da bir örnekle kendi başıma çalıştım. Ancak, hala birkaç zorluk yaşıyorum. Şimdi anlatacağım.J2ME'de Ayrıştırma JSON

Bu benim ayrıştırmak çalışıyorum JSON dizesidir:

{"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\":[]}"} 

gerçek burada, bu sadece örnek verilerdir şey endişelenmeyin.

Artık Müşteriler No, Ad, Adres ve Tasarruf Hesabı bakiyesine ihtiyacım var. Bu, ayrıştırmakta kullandığım koddur: Bu, bir JSONException atar. Bu, tabii ki bir JSONException atar. JSON Kütüphanesi'nin birkaç hata olabileceğini öğrendim. Baskı ifadeleri ile bazı hileler yaptım. JSON dizesinin ilk elemanını tüketmeyi sevdiği ortaya çıkıyor. Bu, örnekte yer aldığımız gibi iç içe geçmiş elemanlardan geçerken çok fazla vida yapıyor.

Kullanabileceğim bir alternatif var mı?

cevap

4

Boy aşağıdaki örnekle JSON dize ayrıştırmak Kendimi vurmak istiyorum yapabilirsiniz. Yatağa gitmeden önce sorunumu çözdüm. Benim yaklaşımım doğruydu; Baskı ifadelerinin çıktılarının yanlış okunması meselesiydi ve JSON'un nasıl iç içe geçmiş olduğunun da göz ardı edilmesiydi.

Dahili olarak JSONOBject sınıfı, JSON öğelerini, çiftlerini vs. bir Hashtable'da depolar. Hashtable'ın kendisine verilen verileri sıralayacağı bir yan etkisi vardır. Tabii ki bu JSON'un nasıl sipariş edildiğini anlatıyor. JSON'un bazı bölümlerini tüketirken, gerçekten de onları arkaya koyduğumda ... JSON'ın sonu olmasaydı, waaay'in geri geldiğini düşündüm. Bu benim içimden büyük ölçüde. Bunu sadece Hashtable'ın kendisinde çalışana kadar fark etmedim. Sonra da JSON'un düşündüğümden daha iç içe olduğunu fark ettim. Üç farklı yuvalanmış JSON nesnesinde, almak istediğim dört bölüm. Böylece, çözümüm kendimi daha fazla keder kaydetmek ve JSON'u güzel bir yazıcıya takmak ve düzgün bir şekilde yapıya kavuşturmaktı.

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:

İşte benim Çözüm kodudur daima JSON üzerinde Pretty Yazıcı kullanın ve bir şey yapmadan önce bu yapı bulunuyor teşekkür ederiz. Yemin ederim ki bu bana bir daha olmayacak.

+0

cevabı sizin için çalışıyorsa, kabul edildi olarak işaretleyin, böylece aynı şeyi arayan başkalarına yardımcı olabilir. :) – Spudley

+0

Evet, bu gerçekten bir süre bir aptal gibi hissetmemi sağladı. Bana izin verdiğinde kabul edeceğim. Çok teşekkürler beyler! :) –

+0

Hala kavanoz dosyası var mı? Json-me kavanozunu bulamıyorum: S – eddy

0

Sen

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

Teşekkürler, çalıştığımdan daha temiz görünüyor. Sanırım problemi çözdüm. Daha fazla bana, JSON yapısını doğru okumadım. –