开发者社区> 问答> 正文

JSONPath.set设置的值与预期不符

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

展开
收起
飘飘斯嘉丽 2023-04-21 12:03:23 232 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    在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”}

    2023-04-21 21:25:47
    赞同 展开评论 打赏
  • 问题已经修复,请用新版本 https://github.com/alibaba/fastjson2/releases/tag/2.0.7

    原回答者GitHub用户wenshao

    2023-04-21 14:41:09
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载