好吧,也许这对于StackOverflow而言过于宽泛,但是有一种很好的通用方法可以将关系表中的数据组合成分层JSON吗?
例如,假设我们有一个“客户”表和一个“订单”表。我希望输出看起来像这样:
{
"customers": [
{
"customerId": 123,
"name": "Bob",
"orders": [
{
"orderId": 456,
"product": "chair",
"price": 100
},
{
"orderId": 789,
"product": "desk",
"price": 200
}
]
},
{
"customerId": 999,
"name": "Fred",
"orders": []
}
]
}
我宁愿不必编写大量的过程代码来遍历主表并一次获取几个订单并附加它们。这将是非常缓慢的。
我正在使用的数据库是MS SQL Server,但我很快就需要对MySQL做同样的事情。我正在使用Java和JDBC进行访问。如果这些数据库中的任何一个都有一些神奇的方法来组装服务器端的这些记录,那将是理想的。
人们如何从关系数据库迁移到像MongoDB这样的JSON数据库?
答案 0 :(得分:1)
以下是一组有用的函数,用于将关系数据转换为JSON和XML以及从JSON转换回表:https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/
答案 1 :(得分:1)
SQL Server 2016终于迎头赶上并添加了对JSON的支持。
JSON支持仍然与PostgreSQL等其他产品不匹配,例如:不包含特定于JSON的数据类型。但是,添加了几个有用的T-SQL语言元素,使得使用JSON变得轻而易举。
E.g。在以下Transact-SQL代码中,定义了包含JSON字符串的文本变量:
DECLARE @json NVARCHAR(4000)
SET @json =
N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}'
然后,您可以使用JSON_VALUE
和JSON_QUERY
函数从JSON文本中提取值和对象:
SELECT
JSON_VALUE(@json, '$.type') as type,
JSON_VALUE(@json, '$.info.address.town') as town,
JSON_QUERY(@json, '$.info.tags') as tags
此外,OPENJSON
函数允许从引用的JSON数组中返回元素:
SELECT value
FROM OPENJSON(@json, '$.info.tags')
最后但并非最不重要的是,有一个FOR JSON
子句可以将SQL结果集格式化为JSON文本:
SELECT object_id, name
FROM sys.tables
FOR JSON PATH
一些参考文献:
答案 2 :(得分:0)
我认为一个概括的'解决方案如下: -
答案 3 :(得分:0)
SQL Server 2016现在支持读取JSON的方式与支持XML的方式大致相同。使用OPENJSON直接查询和存储的JSON数据类型。
答案 4 :(得分:-1)
没有通用方法,因为SQL Server不支持JSON作为其数据类型。你必须为此创建自己的“通用方法”。
查看这篇文章。关于如何将sql server数据操作为JSON格式,有很好的例子。
https://www.simple-talk.com/blogs/2013/03/26/sql-server-json-to-table-and-table-to-json/