0

我有一个需要修改的 json 字符串

{"RecordCount":3,"Top":10,"Skip":0,"SelectedSort":"Seed asc","value":[{"AccountProductListId":22091612871138,"Name":"April 4th 2018","AccountId":256813438078643,"IsPublic":false,"Comment":"Test order sheet","Quantity":3},{"AccountProductListId":166305848801939,"Name":"test","AccountId":256813438078643,"IsPublic":false,"Comment":"","Quantity":1},{"AccountProductListId":21177711287586,"Name":"Test Order sheet","AccountId":256813438078643,"IsPublic":true,"Comment":"the very first sheet","Quantity":2}]}

内部值数组如下所示:

"value": [{
    "AccountProductListId": 22091612871138,
    "Name": "April 4th 2018",
    "IsPublic": false,
    "Comment": "Test order sheet",
    "Quantity": 3
}, {
    "AccountProductListId": 166305848801939,
    "Name": "test",
    "IsPublic": false,
    "Comment": "",
    "Quantity": 1
}, {
    "AccountProductListId": 21177711287586,
    "Name": "Test Order sheet",
    "IsPublic": true,
    "Comment": "the very first sheet",
    "Quantity": 2
}],

我需要做的是从另一个表中附加一些数据:

AccountProductListId    ProductID
21177711287586          97096131867163|32721319938943
22091612871138          97096131867163|145461009584740|130005306921282
166305848801939         8744071222157

如您所见,AccountProductListId 已经在 J​​SON 结果中,所以我应该知道它应该转到哪个数组。唯一的问题是我不知道将 ProductID 数据合并到其特定数组索引中的语法。JSON 数组可以包含 3 个以上的项目。

基本上以这样的方式结束:

    "value": [{
    "AccountProductListId": 22091612871138,
    "Name": "April 4th 2018",
    "IsPublic": false,
    "Comment": "Test order sheet",
    "Quantity": 3,
    "ProductID": "97096131867163|145461009584740|130005306921282"
}, {
    "AccountProductListId": 166305848801939,
    "Name": "test",
    "IsPublic": false,
    "Comment": "",
    "Quantity": 1,
    "ProductID": "8744071222157"
}, {
    "AccountProductListId": 21177711287586,
    "Name": "Test Order sheet",
    "IsPublic": true,
    "Comment": "the very first sheet",
    "Quantity": 2,
    "ProductID": "97096131867163|32721319938943"
}],

任何信息将不胜感激。谢谢。

4

1 回答 1

0

使用 SQL Server 处理

在 SQL Server 2016 之前,没有内置支持读取或写入 JSON。

从 SQL Server 2016 开始,您可以使用 OPENJSON 行集函数来读取 JSON 和 FOR JSON 子句来编写 JSON。

请参阅https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server

该方法是使用 OPENJSON 将 JSON 字符串作为行集读取,将其与表连接以获取 ProductID,并使用 FOR JSON 将其转换回 JSON。

SQL Server 之外的进程

根据您的情况,在 SQL Server 之外解析 JSON 可能更简单。如果走那条路,那么你可以

  1. 从解析的 JSON 中收集所有 AccountProductListID
  2. 通过接受 TVP 输入并输出 AccountProductListID -> ProductID 映射的存储过程将收集到的 id 发送到 SQL Server
  3. 将 ProductID 注入 JSON 对象并序列化回字符串
于 2018-04-06T02:26:18.843 回答