diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF16.java b/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF16.java index 33cafcc720..a3f6942528 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF16.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF16.java @@ -3179,7 +3179,7 @@ public final void writeString(int value) { @Override public final void writeString(long value) { - boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) == 0; + boolean writeAsString = (context.features & (WriteNonStringValueAsString.mask | WriteLongAsString.mask)) == 0; if (writeAsString) { writeQuote(); } diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8.java b/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8.java index e864c9b900..a193b51860 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8.java @@ -375,7 +375,7 @@ public final void writeString(boolean value) { @Override public final void writeString(byte value) { - boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) != 0; + boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) == 0; if (writeAsString) { writeQuote(); } @@ -387,7 +387,7 @@ public final void writeString(byte value) { @Override public final void writeString(short value) { - boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) != 0; + boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) == 0; if (writeAsString) { writeQuote(); } @@ -399,7 +399,7 @@ public final void writeString(short value) { @Override public final void writeString(int value) { - boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) != 0; + boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) == 0; if (writeAsString) { writeQuote(); } @@ -411,7 +411,7 @@ public final void writeString(int value) { @Override public final void writeString(long value) { - boolean writeAsString = (context.features & WriteNonStringValueAsString.mask) != 0; + boolean writeAsString = (context.features & (WriteNonStringValueAsString.mask | WriteLongAsString.mask)) == 0; if (writeAsString) { writeQuote(); } diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_2400/Issue2431.java b/core/src/test/java/com/alibaba/fastjson2/issues_2400/Issue2431.java index 28f39323bd..363698b07d 100644 --- a/core/src/test/java/com/alibaba/fastjson2/issues_2400/Issue2431.java +++ b/core/src/test/java/com/alibaba/fastjson2/issues_2400/Issue2431.java @@ -27,6 +27,10 @@ public void test() { "{\"b\":\"1\",\"d\":\"1.0\",\"f\":\"1.0\",\"i\":\"1\",\"l\":\"1\",\"s\":\"1\",\"z\":\"false\"}", JSON.toJSONString(bean)); + assertEquals( + "{\"b\":\"1\",\"d\":\"1.0\",\"f\":\"1.0\",\"i\":\"1\",\"l\":\"1\",\"s\":\"1\",\"z\":\"false\"}", + new String(JSON.toJSONBytes(bean))); + byte[] bytes = JSONB.toBytes(bean); String str2 = JSONB.toJSONString(bytes); assertEquals("{\n" + @@ -66,6 +70,10 @@ public void test1() { "{\"b\":\"1\",\"d\":\"1.0\",\"f\":\"1.0\",\"i\":\"1\",\"l\":\"1\",\"s\":\"1\",\"z\":\"false\"}", JSON.toJSONString(bean)); + assertEquals( + "{\"b\":\"1\",\"d\":\"1.0\",\"f\":\"1.0\",\"i\":\"1\",\"l\":\"1\",\"s\":\"1\",\"z\":\"false\"}", + new String(JSON.toJSONBytes(bean))); + byte[] bytes = JSONB.toBytes(bean); String str2 = JSONB.toJSONString(bytes); assertEquals("{\n" + @@ -106,6 +114,14 @@ public void test2() { "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", JSON.toJSONString(bean)); + assertEquals( + "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", + new String(JSON.toJSONBytes(bean))); + + assertEquals( + "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", + new String(JSON.toJSONBytes(bean))); + byte[] bytes = JSONB.toBytes(bean); String str2 = JSONB.toJSONString(bytes); assertEquals("{\n" + @@ -146,6 +162,10 @@ public void test3() { "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", JSON.toJSONString(bean)); + assertEquals( + "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", + new String(JSON.toJSONBytes(bean))); + byte[] bytes = JSONB.toBytes(bean); String str2 = JSONB.toJSONString(bytes); assertEquals("{\n" + @@ -186,6 +206,10 @@ public void test4() { "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", JSON.toJSONString(bean)); + assertEquals( + "{\"bs\":[\"1\"],\"ds\":[\"1.0\"],\"fs\":[\"1.0\"],\"is\":[\"1\"],\"ls\":[\"1\"],\"ss\":[\"1\"],\"zs\":[\"false\"]}", + new String(JSON.toJSONBytes(bean))); + byte[] bytes = JSONB.toBytes(bean); String str2 = JSONB.toJSONString(bytes); assertEquals("{\n" +