将JSON转换为XML而不将小数转换为科学计数法

时间:2019-05-21 10:10:35

标签: java json xml jackson scientific-notation

我正在尝试在中间件工具中将JSON转换为XML。我正在使用Jackson库进行此转换。问题是对于8中的十进制字段(长度大于JSON),相应的XML值将转换为科学计数法。例如,8765431002.13被转换为8.76543100213E8

如果知道字段名称,我可以将科学计数法转换为普通的十进制格式。但是在我的情况下,中间件应用程序将无法识别以十进制表示的字段。

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.dataformat.xml.XmlMapper;


public class JSONDataformat {

       public static void main(String[] args) {
              // TODO Auto-generated method stub
              try {
              //String jsonString = "{\"Field1\":18629920.68,\"Field3\":\"test\", \"Field2\":\"null\"}";          
                ObjectMapper objectMapper = new ObjectMapper();
              ObjectMapper xmlMapper = new XmlMapper();
              JsonNode tree = objectMapper.readTree(jsonString);

              String jsonAsXml = xmlMapper.writer().writeValueAsString(tree);
              System.out.println(jsonAsXml);
              }
              catch(Exception e) {e.printStackTrace(); }

       }

}

输出

<ObjectNode xmlns=""><Field1>1.862992068E7</Field1><Field3>test</Field3><Field2/></ObjectNode>

我希望在上面的代码中将<Field1>的值作为18629920.68

1 个答案:

答案 0 :(得分:1)

您需要启用USE_BIG_DECIMAL_FOR_FLOATS功能:

.woocomerce a.button.vipps-express-checkout.alt {
     padding: 0;
}

编辑

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);

上面的代码显示:

import com.fasterxml.jackson.core.JsonGenerator.Feature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.IOException;

public class Test {

    public static void main(String[] args) throws IOException {
        String jsonString = "{\"Field1\": 20121220.00,\"Field3\":\"test\", \"Field2\":\"null\"}";

        ObjectMapper jsonMapper = new ObjectMapper();
        jsonMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);

        XmlMapper xmlMapper = new XmlMapper();

        JsonNode tree = jsonMapper.readTree(jsonString);

        String jsonAsXml = xmlMapper.writer().with(Feature.WRITE_BIGDECIMAL_AS_PLAIN).writeValueAsString(tree);
        System.out.println(jsonAsXml);
    }
}