Небольшая коррекция. Кажется, что метод IE moveEnd () перемещается постепенно, поэтому selRange.moveEnd('character', end)
следует заменить на selRange.moveEnd('character', end-start)
:
function createSelection(field, start, end) {
if( field.createTextRange ) {
var selRange = field.createTextRange();
selRange.collapse(true);
selRange.moveStart('character', start);
selRange.moveEnd('character', end-start);
selRange.select();
} else if( field.setSelectionRange ) {
field.setSelectionRange(start, end);
} else if( field.selectionStart ) {
field.selectionStart = start;
field.selectionEnd = end;
}
field.focus();
}
Мы не можем изменить внутренние адаптеры для Json*
классов, потому что Gson
использует предопределенный com.google.gson.internal.bind.TypeAdapters.JSON_ELEMENT . Но, к счастью, мы можем предоставить нашу JsonWriter
реализацию. Переопределите методы, которые вам нужны, и предоставьте свою реализацию процессу сериализации. Для округления двойных чисел используйте, например, BigDecimal
. Пример пользовательской реализации:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.math.BigDecimal;
public class GsonApp {
public static void main(String[] args) {
Gson gson = new GsonBuilder().create();
JsonArray array = new JsonArray();
array.add(Math.PI);
array.add(Math.E);
StringWriter stringWriter = new StringWriter();
JsonWriter jsonWriter = new JsonWriter(stringWriter) {
@Override
public JsonWriter value(Number value) throws IOException {
BigDecimal bigDecimal = BigDecimal.valueOf(value.doubleValue());
BigDecimal result = bigDecimal.setScale(3, BigDecimal.ROUND_UP);
return super.value(result.doubleValue());
}
};
jsonWriter.setIndent(" ");
gson.toJson(array, jsonWriter);
System.out.println(stringWriter.toString());
}
}
Над кодом напечатаны:
[
3.142,
2.719
]
См. Также: