Использование String
Тип Number
в JSON, скорее всего, будет рассматриваться как число с плавающей точкой , из моего прочтения страницы Википедии , согласно традиционному поведению 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, я не понимаю вашу проблему. Вы используете List
, а массивы необъяснимы.
По сути, вы должны реализовать метод toJson
в своем классе Result
. Вызовите этот 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"
}
Рассмотрим рамки
Совет. Возможно, вы захотите использовать среду отображения JSONppingJava, чтобы помочь вам в этой работе.