Skip to content

Commit

Permalink
fix JSONArray.getString with Date type, for issue #2596
Browse files Browse the repository at this point in the history
  • Loading branch information
hnyyghk authored and wenshao committed May 22, 2024
1 parent 5715aa1 commit 457bbb2
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.reader.ObjectReader;
import com.alibaba.fastjson2.reader.ObjectReaderProvider;
import com.alibaba.fastjson2.util.DateUtils;
import com.alibaba.fastjson2.util.TypeUtils;
import com.alibaba.fastjson2.writer.ObjectWriter;
import com.alibaba.fastjson2.writer.ObjectWriterAdapter;
Expand All @@ -14,6 +15,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.time.temporal.TemporalAccessor;
import java.util.*;
import java.util.function.Function;

Expand Down Expand Up @@ -746,6 +748,20 @@ public String getString(int index) {
return (String) value;
}

if (value instanceof Date) {
long timeMillis = ((Date) value).getTime();
return DateUtils.toString(timeMillis, false, DateUtils.DEFAULT_ZONE_ID);
}

if (value instanceof Boolean
|| value instanceof Character
|| value instanceof Number
|| value instanceof UUID
|| value instanceof Enum
|| value instanceof TemporalAccessor) {
return value.toString();
}

return com.alibaba.fastjson2.JSON.toJSONString(value);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.alibaba.fastjson2.issue_2300;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.junit.jupiter.api.Test;

import java.time.*;
import java.time.chrono.HijrahDate;
import java.time.chrono.JapaneseDate;
import java.time.chrono.MinguoDate;
import java.time.chrono.ThaiBuddhistDate;
import java.time.temporal.TemporalAccessor;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class Issue2596 {
@Test
public void test() {
testTemporal(LocalDate.now(), LocalDateTime.now(),
LocalTime.now(), ZonedDateTime.now(),
OffsetDateTime.now(), Instant.now(),
HijrahDate.now(), JapaneseDate.now(),
OffsetTime.now(), MinguoDate.now(),
ThaiBuddhistDate.now(), YearMonth.now(),
MonthDay.now(), DayOfWeek.of(3));
}

void testTemporal(TemporalAccessor... targets) {
com.alibaba.fastjson.JSONObject j1 = new com.alibaba.fastjson.JSONObject();
JSONObject j2 = new JSONObject();

com.alibaba.fastjson.JSONArray array1 = new com.alibaba.fastjson.JSONArray();
JSONArray array2 = new JSONArray();

int i = 0;
for (TemporalAccessor target : targets) {
j1.put("data", target);
j2.put("data", target);
assertEquals(j1.getString("data"), j2.getString("data"));

array1.add(target);
array2.add(target);
assertEquals(array1.getString(i), array2.getString(i));

i++;
}
}
}

0 comments on commit 457bbb2

Please sign in to comment.