所以我有三个数据库--Oracle数据库、SQL Server数据库和Postgres数据库。我有一个包含两列的表:name
和value
都是文本,值是字符串化的JSON对象,需要更新嵌套值。
这是我目前拥有的:
name: 'MobilePlatform',
value:
'{
"iosSupported":true,
"androidSupported":false,
}'
我想把{"enableTwoFactorAuth": false}
加进去。
4条答案
按热度按时间t1qtbnec1#
在PostgreSQL中,您应该能够做到这一点:
ldioqlga2#
在Postgres中,
jsonb
的普通串联运算符||
可以做到这一点:如果顶层键
"enableTwoFactorAuth"
已经存在,它将被替换,所以它实际上是一个“upsert”。或者使用
jsonb_set()
操作嵌套值。向
text
的强制转换隐式地作为赋值强制转换工作。有效地去除了任何不重要的空白)。如果内容是有效的JSON,那么存储类型应该从
json
开始,在Postges中,jsonb
更好,因为它更容易操作,但是它不能直接移植到前面提到的另外两个RDBMS。(Or,可能是完全没有JSON的规范化设计。)
hfsqlsce3#
适用于ORACLE 21
json_col为JSON或VARCHAR2时|具有IS JSON约束的CLOB列。
(but如果要在json_value.name上创建多值索引,则必须为JSON:
)
inn6fuwd4#
您正在使用的两个数据库支持JSON数据类型,因此将它们作为字符串化的JSON对象放在Text列中没有意义。
甲骨文:https://docs.oracle.com/en/database/oracle/oracle-database/21/adjsn/json-in-oracle-database.html
PostgreSQL语言:https://www.postgresql.org/docs/current/datatype-json.html
除此之外,MSSQL Server还提供了处理JSON数据类型的方法。
MS SQL服务器:https://learn.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver16
在上述任何一个数据库中使用JSON类型列都可以使您使用它们的JSON函数来执行您正在寻找的任务。
如果只需要使用Text,那么可以使用
replace
在JSON末尾添加键值对这里
dataTable
是表的名称。更干净、风险更小的方法是使用应用程序连接到数据库,并使用JSON方法,如Javascript中的
JSON.parse
和Python中的JSON.loads
。这将为您提供JSON对象(Python中的字典)。您也可以在其他语言中寻找类似的方法。但是我建议,如果可能的话,尽可能使用JSON列而不是Text来存储JSON值。