Skip to content

Commit 2447f30

Browse files
committed
bug fix for readStringNotMatch, for issue #3438
1 parent f01af63 commit 2447f30

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

core/src/main/java/com/alibaba/fastjson2/JSONReader.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4733,7 +4733,12 @@ protected final String readStringNotMatch() {
47334733
List array = readArray();
47344734
if (array.size() == 1) {
47354735
Object item = array.get(0);
4736-
return item == null ? null : item.toString();
4736+
if (item == null) {
4737+
return null;
4738+
}
4739+
if (item instanceof String) {
4740+
return item.toString();
4741+
}
47374742
}
47384743
return toString(array);
47394744
case '{':
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.alibaba.fastjson2.issues_3400;
2+
3+
import com.alibaba.fastjson2.JSON;
4+
import lombok.Data;
5+
import org.junit.jupiter.api.Test;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
9+
public class Issue3438 {
10+
@Test
11+
public void test() {
12+
String aaa = "{\"file\":[{\"url\":\"http\"}]}";
13+
Bbb bbb = JSON.parseObject(aaa, Bbb.class);
14+
assertEquals("[{\"url\":\"http\"}]", bbb.file);
15+
}
16+
17+
@Data
18+
public static class Bbb {
19+
String file;
20+
}
21+
}

core/src/test/java/com/alibaba/fastjson2/read/ParserTest_string.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,13 @@ void lexerTest(JSONReader lexer) {
163163
assertEquals(Fnv.hashCode64("v12"), lexer.readFieldNameHashCode());
164164
assertEquals(Fnv.hashCode64LCase("v12"), lexer.getNameHashCodeLCase());
165165
assertEquals("v12", lexer.getFieldName());
166-
assertEquals("1234", lexer
166+
assertEquals("[1234]", lexer
167167
.readString());
168168

169169
assertEquals(Fnv.hashCode64("v13"), lexer.readFieldNameHashCode());
170170
assertEquals(Fnv.hashCode64LCase("v13"), lexer.getNameHashCodeLCase());
171171
assertEquals("v13", lexer.getFieldName());
172-
assertEquals("12.34", lexer.readString());
172+
assertEquals("[12.34]", lexer.readString());
173173

174174
assertEquals(Fnv.hashCode64("v14"), lexer.readFieldNameHashCode());
175175
assertEquals(Fnv.hashCode64LCase("v14"), lexer.getNameHashCodeLCase());

0 commit comments

Comments
 (0)