String jsonStr="{"aaa":"a111","bbb":"b11111"}"; JSONObject jsonObject=JsonUtil.toJsonObject(jsonStr); String valueStr="{"ccc":"c111","ddd":"d11111"}"; JSONObject value=JsonUtil.toJsonObject(valueStr);
JSONPath.set(jsonObject,"$.aaa", value);
System.out.println(jsonObject);
期待结果:
{"aaa":{"ccc":"c111","ddd":"d11111"},"bbb":"b11111"} 在fastjson-1.2.7x以上版本时,结果正确 但在fastjosn-2.0.6版本下,结果如下: {"aaa":["a111",{"ccc":"c111","ddd":"d11111"}],"bbb":"b11111"} aaa节点原值a111仍存在,我想把新值valueStr的值完全替换原来的值,该怎么做?
原提问者GitHub用户microver
在fastjson-2.0.6版本中,JSONPath.set方法的行为与预期不符,无法完全替换节点的值。如果您想要完全替换节点的值,可以使用JSONObject.put方法来实现:
String jsonStr = “{"aaa":"a111","bbb":"b11111"}”; JSONObject jsonObject = JSON.parseObject(jsonStr); String valueStr = “{"ccc":"c111","ddd":"d11111"}”; JSONObject value = JSON.parseObject(valueStr);
jsonObject.put(“aaa”, value); System.out.println(jsonObject);
这样就可以得到预期的结果:
{“aaa”:{“ccc”:“c111”,“ddd”:“d11111”},“bbb”:“b11111”}
问题已经修复,请用新版本 https://github.com/alibaba/fastjson2/releases/tag/2.0.7
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。