使用 org.json 从 XML 转换为 JSON:如何保留数字格式?

Converting from XML to JSON using org.json: how to preserve number format?

我正在使用 org.json lib:

将简单的 XML 转换为 JSON
import org.json.JSONObject;
import org.json.XML;

public class TestJson {
    public static void test_number() {
        String xml = "<BALANCE>32032033.10</BALANCE>";
        JSONObject jsonObj = XML.toJSONObject(xml);
        String json_str = jsonObj.toString(4);
        System.out.println(String.format("%s\n----\n%s", xml, json_str));
    }

    public static void main(String[] args) {
        try {
            test_number();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我的结果:

<BALANCE>32032033.10</BALANCE>
----
{"BALANCE": 3.20320331E7}

如您所见,数字格式已从正常格式更改为科学格式。如何保留数字格式?我希望将 JSON 视为:

{"BALANCE": 32032033.10}

或者最好是字符串:

{"BALANCE": "32032033.10"}

我使用 org.json 来自 json-20190722.jar

您有一个 String,您可以使用此行解析 JSON 获得:

String json_str = jsonObj.toString(4);

您可以通过从 String 创建 BigDecimal 并使用 setScale(...) 应用数字格式来保留或重置格式,如下所示:

public static void main(String[] args) {
    String json_str = "3.20320331E7";
    BigDecimal bigDecimal = new BigDecimal(json_str);
    System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP));
}

该示例的输出 main 是这样的:

32032033.10

希望下面的代码有助于解决问题。请使用 XML.toJSONObject(xml,true) 而不是 XML.toJSONObject(xml);

import org.json.JSONObject;
import org.json.XML;

public class TestJson {
    public static void test_number() {
        String xml = "<BALANCE>32032033.10</BALANCE>";
        JSONObject jsonObj = XML.toJSONObject(xml,true);
        System.out.println(String.format("%s\n----\n%s", xml, jsonObj.toString()));
    }

    public static void main(String[] args) {
        try {
            test_number();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出:

<BALANCE>32032033.10</BALANCE>
----
{"BALANCE":"32032033.10"}

在这里您可以使用

 <!-- https://mvnrepository.com/artifact/org.json/json -->
 <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20140107</version>
 </dependency>

那么您现有的代码将无需任何更改即可工作。

否则你想使用最新版本,即 json-20190722.jar,然后你需要按照@vigneshwaran m.[=15= 的建议,在你的 toJSONObject(String string, boolean keepStrings) 方法中将 true 作为额外参数传递]

where @param keepStrings If true, then values will not be coerced into boolean
     *  or numeric values and will instead be left as strings

这来自 json-20190722.jar javadoc,请在此处查看 https://github.com/stleary/JSON-java/blob/master/XML.java