From 17d1c1a5c4cd2e1572aa5f8b356e18cf089118c5 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 24 May 2020 22:37:53 +0800 Subject: [PATCH] bug fixed for jsonpath set --- .../java/com/alibaba/fastjson/JSONPath.java | 4 ++ .../json/bvt/path/JSONPath_set_test7.java | 42 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/test/java/com/alibaba/json/bvt/path/JSONPath_set_test7.java diff --git a/src/main/java/com/alibaba/fastjson/JSONPath.java b/src/main/java/com/alibaba/fastjson/JSONPath.java index 06493e3ed..1c8c3a308 100644 --- a/src/main/java/com/alibaba/fastjson/JSONPath.java +++ b/src/main/java/com/alibaba/fastjson/JSONPath.java @@ -3844,6 +3844,10 @@ public class JSONPath implements JSONAware { return false; } + if (value != null && value.getClass() != fieldDeserializer.fieldInfo.fieldClass) { + value = TypeUtils.cast(value, fieldDeserializer.fieldInfo.fieldType, parserConfig); + } + fieldDeserializer.setValue(parent, value); return true; } diff --git a/src/test/java/com/alibaba/json/bvt/path/JSONPath_set_test7.java b/src/test/java/com/alibaba/json/bvt/path/JSONPath_set_test7.java new file mode 100644 index 000000000..4cf3616d8 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/path/JSONPath_set_test7.java @@ -0,0 +1,42 @@ +package com.alibaba.json.bvt.path; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSONPath; +import junit.framework.TestCase; + +public class JSONPath_set_test7 extends TestCase { + public void test_jsonpath_1() throws Exception { + JSONObject aa= new JSONObject(); + aa.put("val", "false"); + JSONPath path = JSONPath.compile("$.val"); + + path.set(aa, true); + assertEquals(true, aa.getBoolean("val").booleanValue()); + + path.set(aa, false); + assertEquals(false, aa.getBoolean("val").booleanValue()); + } + + public void test_jsonpath_2() throws Exception { + VO aa = new VO(); + JSONPath path = JSONPath.compile("$.val"); + + path.set(aa, true); + assertEquals(true, aa.val); + + path.set(aa, false); + assertEquals(false, aa.val); + + path.set(aa, "true"); + assertEquals(true, aa.val); + + path.set(aa, "false"); + assertEquals(false, aa.val); + } + + + public static class VO { + public boolean val; + } + +}