在Java中以JSON字符串值的形式返回BigDecimal字段
我有一个在Java中以JSON字符串值的形式返回BigDecimal字段,java,json,rest,get,bigdecimal,Java,Json,Rest,Get,Bigdecimal,我有一个getapi,它返回一个JSON。预期的格式为: { "value1": "123.00", "value2": "23.00" } 这些值是对象中的BigDecimal: public class Result{ BigDecimal value1; BigDecimal value2; // getters and setters } 现在,当发出请求时,我创建Result对象,并将这些值填充为BigDecimal,创建一个列表并返回。我收到的
getapi
,它返回一个JSON
。预期的格式为:
{
"value1": "123.00",
"value2": "23.00"
}
这些值是对象中的BigDecimal
:
public class Result{
BigDecimal value1;
BigDecimal value2;
// getters and setters
}
现在,当发出请求时,我创建Result
对象,并将这些值填充为BigDecimal
,创建一个列表并返回。我收到的答复是:
{
"value1": 123.00,
"value2": 23.00
}
值是正确的,但不是字符串。我怎样才能把它们做成细绳呢
我知道我们可以将BigDecimal
转换为String
,但我有一个只包含BigDecimal字段的对象,我无法向它填充字符串值
最后,以下是列表的编制方式:
List<MyObj> obj = Arrays.stream(myObj).collect(Collectors.toList());
Result result = new Result();
obj.forEach(t -> t.mergeToResult(result)); // mergeToResults does all the population like result.setValue1(new BigDecimal(123.00))
return result;
List obj=Arrays.stream(myObj.collect)(Collectors.toList());
结果=新结果();
对象forEach(t->t.mergeToResult(result));//mergeToResults执行所有类似于填充的结果。setValue1(新的BigDecimal(123.00))
返回结果;
使用字符串
根据JavaScript的传统行为,JSON中的Number
类型很可能被视为一个数字。浮点技术为了提高执行速度而故意牺牲精度
该类的目的正好相反,即为了准确性而牺牲执行速度
因此,如果您希望最好地保留BigDecimal
值,请将其存储为字符串。希望这种方法能够减少JSON的使用者不经意间将传入值解析为浮点值的可能性。向那些使用JSON的人清楚地说明您希望将数据解析为BigDecimal
或等效值而不是浮点值
Java导出:
String输出=myBigDecimal.toString();
JSON:
{
“值1”:“123.00”,
“值2”:“23.00”
}
Java导入:
BigDecimal bd=新的BigDecimal(“123.00”);
学习和的文档。您还应该了解该方法
溪流
至于您的Java流,我不理解您的问题。您使用的列表
和数组无法解释
基本上,您应该在Result
类上实现toJson
方法。在流代码中调用Result::toJson
方法
下面是这样一个类的示例
package com.basilbourque.example;
import java.math.BigDecimal;
public class Result {
BigDecimal start, stop;
public String toJson () {
StringBuilder sb = new StringBuilder( "{\n" );
sb.append( " " ); // Indent with four spaces.
sb.append( this.enquote( "start:" ) + " " );
sb.append( this.enquote( start.toString() ) );
sb.append( " , \n" );
sb.append( " " ); // Indent with four spaces.
sb.append( this.enquote( "stop:" ) + " " );
sb.append( this.enquote( stop.toString() ) );
sb.append( "\n}\n" );
return sb.toString();
}
static public Result fromJson ( String json ) {
…
}
private String enquote ( String string ) {
return "\"" + string + "\"";
}
// Constructor
public Result ( BigDecimal start , BigDecimal stop ) {
this.start = start;
this.stop = stop;
}
public static void main ( String[] args ) {
Result r = new Result( new BigDecimal( "123.00" ) , new BigDecimal( "23.00" ) );
System.out.println( r.toJson() );
}
}
跑步的时候
{
"start:" "123.00" ,
"stop:" "23.00"
}
考虑一个框架
提示:您可能想考虑使用JSON↔Java映射框架来帮助您完成这项工作。
您可以使用@JsonFormat
注释,如下所示:
import com.fasterxml.jackson.annotation.JsonFormat;
public class Result {
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal value;
// getters and setters
}
您是否正在使用某个库进行json序列化/反序列化?在返回json输出时,是否可以创建自定义序列化程序将BigDecimal值转换为字符串?否,不使用任何库。@Ankur:这就是问题所在,我应该如何做?您能帮助添加序列化结果
对象的方式吗?