查看以体现这个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 的支持是高度特定于供应商的。请为您正在使用的数据库产品添加tagpostgresql
, 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的结构的主要内容,如果未能解决你的问题,请参考以下文章
Atitit 大json文件的结构化查看解决方案,高性能的jsonview attilax总结.docx
如何比较每个字典中 JSON Array 键值的字符串以查看它们是不是包含 NSUserDefault 字符串并返回 JSON 字典匹配项