查看以体现这个json的结构

Posted

技术标签:

【中文标题】查看以体现这个json的结构【英文标题】:View in order to reflect the structure of this json 【发布时间】:2018-06-25 09:45:27 【问题描述】:

这是我的 json:

              
                    "ItemCode": "NEWZTN109314",
                    "ItemName": "STAFFA SGNACIO RAPIDO ANTENNA NAV900",
                    "CodeBars": "2000000100227",
                    "WhsCode": "M1"
                    "Bin":[
                    
                        "AbsEntry": 1,
                        "BinCode": "M1-SYSTEM-BIN-LOCATION",
                        "OnHandQty": "-2"
                    ,
                    
                        "AbsEntry": 6,
                        "BinCode": "M1-F-01-A1-01",
                        "OnHandQty": "250"
                    ,
                    
                        "AbsEntry": 7,
                        "BinCode": "M1-F-01-A1-02",
                        "OnHandQty": "250"
                    
                    ]

表格广告字段为:

CREATE VIEW "MyVie"( "AbsEntry",
     "BinCode",
     "ItemCode",
     "ItemName",
     "CodeBars",
     "OnHandQty",
     "WhsCode" ) AS SELECT
 "OBIN"."AbsEntry",
     "OBIN"."BinCode",
     "OIBQ"."ItemCode",
     "OITM"."ItemName",
     "OITM"."CodeBars",
     "OIBQ"."OnHandQty",
     "OIBQ"."WhsCode" 
FROM "OBIN" 
INNER JOIN "OIBQ" ON "OBIN"."AbsEntry"="OIBQ"."BinAbs" 
INNER JOIN "OITM" ON "OITM"."ItemCode"="OIBQ"."ItemCode"

我应该做哪些改变才能反映这种模式?

【问题讨论】:

您使用的是哪个DBMS product? “SQL”只是一种查询语言,而不是特定数据库产品的名称,并且对 JSON 的支持是高度特定于供应商的。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ... 您还使用什么版本的 SQL Server?当您说反映该模式时,您的意思是您要使用 T-SQL 生成 JSON? 不,我想创建一个反映 json 的视图 “反射”是什么意思?你的结果会是什么样子?在您的问题中包含您的预期结果。 我想知道是否可以创建一个结构类似于 json 的视图 【参考方案1】:

为了生成您发布的嵌套 JSON,您必须使用 JOIN 语句(更多信息 here)。

要使用连接,您必须有两个视图/表。 快速而肮脏的解决方案是自行加入您已有的视图 (MyVie),然后使用 FOR JSON AUTO 提取 JSON 输出:

select A.ItemCode, A.ItemName, A.CodeBars, A.WhsCode, 
       Bin.AbsEntry, Bin.BinCode, Bin.OnHandQty
from MyVie A 
inner join MyVie Bin on A.AbsEntry = Bin.AbsEntry 
      and A.BinCode = Bin.BinCode 
      and A.ItemCode = Bin.ItemCode
for json auto, WITHOUT_ARRAY_WRAPPER   

输出:


  "ItemCode": "NEWZTN109314",
  "ItemName": "STAFFA SGNACIO RAPIDO ANTENNA NAV900",
  "CodeBars": "2000000100227",
  "WhsCode": "M1",
  "Bin": [
    
      "AbsEntry": 1,
      "BinCode": "M1-SYSTEM-BIN-LOCATION",
      "OnHandQty": "-2"
    ,
    
      "AbsEntry": 6,
      "BinCode": "M1-F-01-A1-01",
      "OnHandQty": "250"
    ,
    
      "AbsEntry": 7,
      "BinCode": "M1-F-01-A1-02",
      "OnHandQty": "250"
    
  ]

如果你想要一个更干净的解决方案,你应该写两个视图:

    带有“根”元素的第一个视图: 项目代码 项目名称 代码栏 WhsCode 带有“children”元素的第二个视图: AbsEntry BinCode 手头数量

然后您可以JOIN 这些视图并像前面的示例一样提取 JSON。

这是我用于快速&肮脏解决方案的完整代码:

if OBJECT_ID('OIBQ') is not null drop TABLE OIBQ
if OBJECT_ID('OITM') is not null drop TABLE OITM
if OBJECT_ID('OBIN') is not null drop TABLE OBIN
go
CREATE TABLE OIBQ(ItemCode varchar(50), OnHandQty varchar(50), WhsCode  varchar(50), BinAbs int)
CREATE TABLE OITM(ItemCode varchar(50), ItemName  varchar(50), CodeBars varchar(50))
CREATE TABLE OBIN(AbsEntry int        , BinCode   varchar(50), BinAbs   int)
go
insert into OIBQ values
     ('NEWZTN109314',-2,'M1',1)
    ,('NEWZTN109314',250,'M1',6)
    ,('NEWZTN109314',250,'M1',7)
insert into OITM values 
    ('NEWZTN109314','STAFFA SGNACIO RAPIDO ANTENNA NAV900','2000000100227')
insert into OBIN values
     (1, 'M1-SYSTEM-BIN-LOCATION', -2)
    ,(6, 'M1-F-01-A1-01', 250) 
    ,(7, 'M1-F-01-A1-02', 250)
go
if OBJECT_ID('MyVie') is not null
drop VIEW MyVie
go
CREATE VIEW MyVie( AbsEntry,
     BinCode,
     ItemCode,
     ItemName,
     CodeBars,
     OnHandQty,
     WhsCode ) AS SELECT
 OBIN.AbsEntry,
     OBIN.BinCode,
     OIBQ.ItemCode,
     OITM.ItemName,
     OITM.CodeBars,
     OIBQ.OnHandQty,
     OIBQ.WhsCode 
FROM OBIN 
    INNER JOIN OIBQ ON OBIN.AbsEntry=OIBQ.BinAbs 
    INNER JOIN OITM ON OITM.ItemCode=OIBQ.ItemCode
go
select A.ItemCode, A.ItemName, A.CodeBars, A.WhsCode, 
       Bin.AbsEntry, Bin.BinCode, Bin.OnHandQty
from MyVie A 
inner join MyVie Bin on A.AbsEntry = Bin.AbsEntry and A.BinCode = Bin.BinCode and A.ItemCode = Bin.ItemCode
for json auto, WITHOUT_ARRAY_WRAPPER   

【讨论】:

以上是关于查看以体现这个json的结构的主要内容,如果未能解决你的问题,请参考以下文章

如何以易于阅读的格式查看此内容? (JSON)

DataGrip 以漂亮的方式查看 JSON

vue 查看dist文件里的结构

Atitit 大json文件的结构化查看解决方案,高性能的jsonview  attilax总结.docx

如何在 React 中查看 axios 错误响应 JSON

如何比较每个字典中 JSON Array 键值的字符串以查看它们是不是包含 NSUserDefault 字符串并返回 JSON 字典匹配项