首页 > 解决方案 > 遍历嵌套的 Json Array 并对 String Java 执行操作

问题描述

我有这种格式的json数组

    [
{
    "promise_detail": [
        {
            "promise_date": "15 OCT 2020",
            "promise_amount": "USD 1086",
            "status": "CANCELLED"
        }
    ],
    "promise_note": "hello"
}

]

我的要求是我需要遍历 Json 数组并将承诺金额字段格式化为小数点后两位,类似于“USD 1086.00”

这是我想要做的

    result = executeQueries.getPromiseHistoryDetails(promiseHistoryModel);//Here result is same Json Array as shown above
    for (int n = 0; n < result.length(); n++) {
            JSONObject object = result.getJSONObject(n);
            for(int k=0;k<object.length();k++) {  //struck here
                String promiseAmount = object.getJSONObject(k);
                Float amount=Float.parseFloat(promiseAmount);
                if (object.get("promise_amount") != null) {
                    DecimalFormat df = new DecimalFormat("0.00");
                    df.setMaximumFractionDigits(2);
                    result.getJSONObject(n).put("promise_amount", df.format(amount));
                }
            }
            
        }

但是我遇到了一些问题。我在这一点上感到震惊。谁能建议我如何实现这一点。这是我的预期输出

    [
{
    "promise_detail": [
        {
            "promise_date": "15 OCT 2020",
            "promise_amount": "USD 1086.00",
            "status": "CANCELLED"
        }
    ],
    "promise_note": "hello"
}
]

标签: javajson

解决方案


看来您混淆了JSONArraywith的操作JSONObject。内部 for 循环应该遍历 aJSONArray而不是 a JSONObject

并且promise_amount您给定的 JSON 字符串中的格式是 a String,因此您可以.00按如下方式附加到原始值:

代码片段

for (int n = 0; n < result.length(); n++) {
    JSONArray object = result.getJSONObject(n).getJSONArray("promise_detail");
    for (int k = 0; k < object.length(); k++) {
        String promiseAmount = object.getJSONObject(k).getString("promise_amount");
        if (promiseAmount != null) {
            object.getJSONObject(k).put("promise_amount", String.format("%s.00", promiseAmount));
        }
    }
}

推荐阅读