使用String
根据我对维基百科页面的阅读,JSON中的Number
类型很可能被视为浮点数,这符合JavaScript传统行为。浮点技术有意牺牲精度以换取执行速度。
BigDecimal
类恰恰相反,为了保证准确性而牺牲执行速度。
因此,如果您希望最好地保留BigDecimal
值,请将其存储为String
。希望这种方法可以降低JSON接收方意外将传入值解析为浮点数的可能性。向那些消费您的JSON数据的人明确说明您希望将数据解析为BigDecimal
或等效类型而不是浮点数。
Java导出:
String output = myBigDecimal.toString() ;
JSON:
{
"value1": "123.00",
"value2": "23.00"
}
Java导入:
BigDecimal bd = new BigDecimal( "123.00" ) ;
学习 BigDecimal::toString
和 new BigDecimal( string )
的文档。您还应该了解 BigDecimal::toPlainString
方法。
流(Streams)
至于您的Java流(streams),我不理解您的问题。您对使用 List
和数组的解释不清楚。
基本上,您应该在您的 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( " " );
sb.append( this.enquote( "start:" ) + " " );
sb.append( this.enquote( start.toString() ) );
sb.append( " , \n" );
sb.append( " " );
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 + "\"";
}
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映射框架来帮助完成此项工作。