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)方法将有所帮助。