Java thr org.json jar中的XML.toString(jsonObject)正在修剪尾随零

Java thr org.json jar中的XML.toString(jsonObject)正在修剪尾随零,java,json,xml,org.json,Java,Json,Xml,Org.json,org.jsonjar中的XML.toString(jsonObject)正在修剪尾随零。 比如说 { "somekey":300.10, "somekey1":300.00, } 将上述json转换为xml会导致 <somekey>300.1</somekey> <somekey1>300.0</somekey1> 300.1 300 我怎样才能防止它被修剪成零呢?你可以把值作为字符串而不是双字符串放到JSONObject: final J

org.json
jar中的
XML.toString(jsonObject)
正在修剪尾随零。 比如说

{
"somekey":300.10,
"somekey1":300.00,
}
将上述json转换为xml会导致

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

我怎样才能防止它被修剪成零呢?你可以把值作为字符串而不是双字符串放到
JSONObject

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

这将保留结尾的零。

您可以将值作为
字符串而不是
双精度
放入
JSONObject

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

这将保留结尾的零。

您可以使用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)));
    }

}
公共类XmlTest{
公共静态类SimpleBean{
双a;
双b;
公共双getA(){
返回a;
}
公共无效setA(双a){
这个a=a;
}
公共双getB(){
返回b;
}
公共空间设置(双b){
这个.b=b;
}
公共SimpleBean(双a,双b){
超级();
这个a=a;
这个.b=b;
}
}
公共静态类DoubleSerializer扩展了StdSerializer{
公共双序列化程序(){
这个(空);
}
公共双序列化程序(t类){
超级(t);
}
@凌驾
public void serialize(双值、JsonGenerator gen、SerializerProvider提供程序)引发IOException{
gen.writeStartObject();
gen.writeRaw(String.format(Locale.ROOT,“%.2f”,value));
writeEndObject将军();
}
}
公共静态void main(字符串[]args)引发JsonProcessingException{
XmlMapper XmlMapper=新的XmlMapper();
SimpleModule=新的SimpleModule();
addSerializer(Double.class,新的DoubleSerializer());
registerModule(模块);
System.out.println(xmlMapper.writeValueAsString(新SimpleBean(1.50,1.60));
}
}

您可以使用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)));
    }

}
公共类XmlTest{
公共静态类SimpleBean{
双a;
双b;
公共双getA(){
返回a;
}
公共无效setA(双a){
这个a=a;
}
公共双getB(){
返回b;
}
公共空间设置(双b){
这个.b=b;
}
公共SimpleBean(双a,双b){
超级();
这个a=a;
这个.b=b;
}
}
公共静态类DoubleSerializer扩展了StdSerializer{
公共双序列化程序(){
这个(空);
}
公共双序列化程序(t类){
超级(t);
}
@凌驾
public void serialize(双值、JsonGenerator gen、SerializerProvider提供程序)引发IOException{
gen.writeStartObject();
gen.writeRaw(String.format(Locale.ROOT,“%.2f”,value));
writeEndObject将军();
}
}
公共静态void main(字符串[]args)引发JsonProcessingException{
XmlMapper XmlMapper=新的XmlMapper();
SimpleModule=新的SimpleModule();
addSerializer(Double.class,新的DoubleSerializer());
registerModule(模块);
System.out.println(xmlMapper.writeValueAsString(新SimpleBean(1.50,1.60));
}
}

json不受我控制。它是Web服务的结果call@Srigandan然后你需要将它格式化为2位小数。如果是一个或两个字段,我可以这样做。但是有多个服务,每个服务都有多个此类字段。这是库文件本身的问题吗?XML.toString()只使用对象的toString()。我不认为这是一个问题……为什么不编写一个静态utils方法,用
String
替换
JSONObeject
中的
double
float
值,或者对其应用一种格式?如果对性能的影响不是太坏的话……json不是由我控制的。它是Web服务的结果call@Srigandan然后你需要将它格式化为2位小数。如果是一个或两个字段,我可以这样做。但是有多个服务,每个服务都有多个此类字段。这是库文件本身的问题吗?XML.toString()只使用对象的toString()。我不认为这是一个问题……为什么不编写一个静态utils方法,用
String
替换
JSONObeject
中的
double
float
值,或者对其应用一种格式?如果对性能的影响不是太大…
300.10
300.1
是相同的数字。如果要保留2位小数,则不需要数字,而是数字的文本表示形式,例如
“300.10”
。下划线java库可以将xml转换为json。U.xmlToJson(xml)方法将有所帮助。
300.10
300.1
是相同的数字。如果要保留2位小数,则不需要数字,而是数字的文本表示形式,例如
“300.10”
。下划线java库可以将xml转换为json。U.xmlToJson(xml)方法将有所帮助。