将JSON转换为XML而不将小数转换为科学符号



我正在尝试将JSON转换为中间档工具中的XML。我正在使用Jackson库进行此转换。问题在于,对于JSON中的十进制字段(长度大于8的长度(,相应的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

您需要启用use_big_decimal_for_floats功能:

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);
    }
}

上面的代码打印:

<ObjectNode><Field1>20121220</Field1><Field3>test</Field3><Field2>null</Field2></ObjectNode>

相关内容

  • 没有找到相关文章

最新更新