加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在J2ME中解析JSON

发布时间:2020-12-14 19:20:31 所属栏目:Java 来源:网络整理
导读:所以,我一直在尝试解析这个嵌套的JSON字符串.如果这是普通的Java,甚至是PHP,我相信很久以前就已经完成了.不幸的是,我坚持使用J2ME.通过一些搜索我发现有一个lone JSON parser.这是我通过similar question的一些挖掘找到的.我自己尝试了一些工作,在another qu

所以,我一直在尝试解析这个嵌套的JSON字符串.如果这是普通的Java,甚至是PHP,我相信很久以前就已经完成了.不幸的是,我坚持使用J2ME.通过一些搜索我发现有一个lone JSON parser.这是我通过similar question的一些挖掘找到的.我自己尝试了一些工作,在another question有一个例子.但是,我仍然有一些困难.我现在解释一下.

这是我正在尝试解析的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","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字符串的第一个元素.这会严重影响嵌套元素,就像我们在示例中所见.

有没有我可以使用的替代方案?

最佳答案
男孩,我想拍自己.在我上床睡觉之前,我想出了自己的问题.我的方法是正确的;这只是我读取Print语句输出错误以及低估JSON嵌套方式的问题.

在内部,JSONOBject类将JSON元素,对等存储在Hashtable中. Hashtable具有副作用,它将对给定的数据进行排序.这当然是关于如何订购JSON的.我认为它消耗了JSON的某些部分,而它实际上只是将它们放在后面……如果不是JSON的结尾那么回事.这大大地通过了我.在我刚刚在Hashtable上运行toString之前,我没有意识到这一点.然后我也意识到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上使用漂亮的打印机,并在你做任何事情之前欣赏它的结构.我发誓这不会发生在我身上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读