Skip to content

Commit a7a5c59

Browse files
authored
jsontransformer: All numbers as numbers (#1557)
1 parent 71fd588 commit a7a5c59

3 files changed

Lines changed: 46 additions & 9 deletions

File tree

src/main/java/net/datafaker/transformations/JsonTransformer.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,12 @@ private static void value2String(Object value, StringBuilder sb) {
121121
if (value == null) {
122122
sb.append("null");
123123
} else if (value instanceof Integer
124-
|| value instanceof Long
125-
|| value instanceof Short
126-
|| value instanceof BigInteger
127-
|| value instanceof Boolean
128-
|| (value instanceof Double
129-
&& BigDecimal.valueOf((Double) value).remainder(BigDecimal.ONE).doubleValue() == 0)
130-
|| (value instanceof BigDecimal
131-
&& ((BigDecimal) value).remainder(BigDecimal.ONE).doubleValue() == 0)) {
124+
|| value instanceof Long
125+
|| value instanceof Short
126+
|| value instanceof BigInteger
127+
|| value instanceof Boolean
128+
|| value instanceof Double
129+
|| value instanceof BigDecimal) {
132130
sb.append(value);
133131
} else {
134132
String val = String.valueOf(value);

src/test/java/net/datafaker/formats/JsonTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ private static Stream<Arguments> generateTestSchema() {
204204
of(Schema.of(field("key", () -> "value")), "{\"key\": \"value\"}"),
205205
of(Schema.of(field("number", () -> 123)), "{\"number\": 123}"),
206206
of(Schema.of(field("number", () -> 123.0)), "{\"number\": 123.0}"),
207-
of(Schema.of(field("number", () -> 123.123)), "{\"number\": \"123.123\"}"),
207+
of(Schema.of(field("number", () -> 123.123)), "{\"number\": 123.123}"),
208208
of(Schema.of(field("boolean", () -> true)), "{\"boolean\": true}"),
209209
of(Schema.of(field("nullValue", () -> null)), "{\"nullValue\": null}"),
210210
of(
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.datafaker.transformations;
2+
3+
import static net.datafaker.transformations.Field.field;
4+
import static org.assertj.core.api.Assertions.assertThat;
5+
6+
import java.math.BigDecimal;
7+
8+
import org.junit.jupiter.api.Test;
9+
10+
import net.datafaker.AbstractFakerTest;
11+
12+
class JsonTransformerTest extends AbstractFakerTest{
13+
14+
@Test
15+
void issue1556Double() {
16+
// Given
17+
double aDouble = faker.number().randomDouble(3, 1, 2);
18+
Schema<Object, ?> schema = Schema.of(
19+
field("Dbl", () -> aDouble));
20+
// When
21+
JsonTransformer<Object> transformer = JsonTransformer.builder().build();
22+
String json = transformer.generate(schema, 1);
23+
// Then - Number not quoted
24+
assertThat(json).isEqualTo("{\"Dbl\": %s}".formatted(aDouble));
25+
}
26+
27+
@Test
28+
void issue1556BigDecimal() {
29+
// Given
30+
BigDecimal aBigDec = BigDecimal.valueOf(faker.number().randomDouble(7, 1, 2));
31+
Schema<Object, ?> schema = Schema.of(
32+
field("BigDecimal", () -> aBigDec));
33+
// When
34+
JsonTransformer<Object> transformer = JsonTransformer.builder().build();
35+
String json = transformer.generate(schema, 1);
36+
// Then - Number not quoted
37+
assertThat(json).isEqualTo("{\"BigDecimal\": %s}".formatted(aBigDec));
38+
}
39+
}

0 commit comments

Comments
 (0)