我们在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"+"}"+") "
不需要字符串操作:
如果该列被定义为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}");
您可以从包含JSON的数据库中获取当前必填字段,并通过UPDATE查询将其替换为新的JSON
要在JSON中添加新条目,您可以尝试这种方式 - >
var obj = {};
obj = {“1”:“a”,“2”:“b”};
obj [“3”] =“c”;