查询从Java层在DB中的Saved Json中插入新的json String

问题描述 投票:1回答:2

我们在DB中有一列已经以String的格式保存了JSON值,例如:

{"listOfPlaces" : [1,2,3], "segment" : 1}

现在,从具有UPDATE Query的JAVA层我们需要更新JSON。例如:我们需要添加

 activityId : 1

这里保存了DB的JSON。

这样我们就可以将JSON存储为:

{"listOfPlaces" : [1,2,3], "segment" : 1, activityId : 1}

我尝试使用下面提到的代码,但不确定它是否准确。

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue(newFieldName, newFilterCriteriaForAddition.getName());
parameters.addValue(newFieldValue, newFilterCriteriaForAddition.getDefaultValue());
int update = namedParameterJdbcTemplate.update(Constant.SQL_TO_ADD_FILTER_CRITERIA_IN_SAVED_REPORT, parameters);

和查询是:

"UPDATE adv.sav_table SET filter_crtr = LEFT(rpt_filter_crtra, -1)  + "||CONCAT("
+ ",\""
+ ":newFieldName:"+":"+newFieldValue"+"}"+") "
java postgresql
2个回答
0
投票

不需要字符串操作:

如果该列被定义为jsonb(它应该是),您可以简单地连接新值:

update adv.sav_table 
   SET filter_crtr  = filter_crtr || '{"activityId":1}'
where ...;

这可以通过PreparedStatement完成:

update adv.sav_table 
   SET filter_crtr  = filter_crtr || cast(? as jsonb)
where ...;

然后使用

PreparedStatement pstmt  = connection.prepareStatement("UPDATE ...");
psmt.setString(1, "{\"activityId\":1}");

0
投票

您可以从包含JSON的数据库中获取当前必填字段,并通过UPDATE查询将其替换为新的JSON

要在JSON中添加新条目,您可以尝试这种方式 - >

var obj = {};

obj = {“1”:“a”,“2”:“b”};

obj [“3”] =“c”;

© www.soinside.com 2019 - 2024. All rights reserved.