【问题标题】:XML.toString(jsonObject) in thr org.json jar is trimming tailing zeroorg.json jar 中的 XML.toString(json Object) 正在修剪尾随零
【发布时间】:2020-04-27 07:09:56
【问题描述】:

org.json jar 中的XML.toString(jsonObject) 正在修剪拖尾零。 例如

{
"somekey":300.10,
"somekey1":300.00,
}

将上面的 json 转换为 xml 结果

<somekey>300.1</somekey>
<somekey1>300.0</somekey1>

我怎样才能让它不修剪那个零

【问题讨论】:

  • 300.10300.1 是相同的编号。如果你想保留 2 位小数,那么你不需要 number,而是需要一个数字的 text 表示,例如"300.10".
  • Underscore-java库可以将xml转json。 U.xmlToJson(xml) 方法会有所帮助。

标签: java json xml org.json


【解决方案1】:

您可以将值作为String 而不是double 放入JSONObject

final JSONObject jsonObject = new JSONObject();
jsonObject.put("someKey", "300.10" );
jsonObject.put("somekey1", "300.00" );
final String xml = XML.toString(jsonObject);

这将保留结尾的零。

【讨论】:

  • json不受我控制。这是网络服务调用的结果
  • @Srigandan 然后你需要将其格式化为 2 位小数。
  • 如果是一个或两个字段,我可以做到。但是有多个服务,每个服务都有多个这种类型的字段。这是库文件本身的问题吗?
  • XML.toString() 仅使用对象的 toString()。我不会将此称为问题...
  • 您为什么不编写一个静态 utils 方法,将 JSONObejects 中的 doublefloat 值替换为 String 或对其应用格式?如果对性能的影响还不算太差的话……
【解决方案2】:

您可以使用 jackson XmlMapper 并使用适合您需要的格式编写和注册 DuoubleSerializer。

public class XmlTest {

    public static class SimpleBean {
        Double a;
        Double b;

        public Double getA() {
            return a;
        }

        public void setA(Double a) {
            this.a = a;
        }

        public Double getB() {
            return b;
        }

        public void setB(Double b) {
            this.b = b;
        }

        public SimpleBean(Double a, Double b) {
            super();
            this.a = a;
            this.b = b;
        }

    }

    public static class DoubleSerializer extends StdSerializer<Double> {

        public DoubleSerializer() {
            this(null);
        }

        public DoubleSerializer(Class<Double> t) {
            super(t);
        }

        @Override
        public void serialize(Double value, JsonGenerator gen, SerializerProvider provider) throws IOException {
            gen.writeStartObject();
            gen.writeRaw(String.format(Locale.ROOT, "%.2f", value));
            gen.writeEndObject();
        }

    }

    public static void main(String[] args) throws JsonProcessingException {
        XmlMapper xmlMapper = new XmlMapper();

        SimpleModule module = new SimpleModule();
        module.addSerializer(Double.class, new DoubleSerializer());
        xmlMapper.registerModule(module);

        System.out.println(xmlMapper.writeValueAsString(new SimpleBean(1.50, 1.60)));
    }

}

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多