包括从 SQL 到 JSON 的 'bit' 个值
Including 'bit' values from SQL to JSON
我的存储过程工作流程如下:
- Table #ans(qid int, ans varchar(50), aid varchar(10))
- Table #temp1(cid int, [q1] 位)
- Table #final(XML_data varchar(max)
Rextester:http://rextester.com/PUX22792
temp1 table 有一个列 q1,它实际上是从 #ans table 和 aid 列分组的,它是 varchar。 q1 被声明为位,但它来自 varchar 列。所以在最后的 XML table 上,我 select 这一栏 [q1] 原样,当我将 XML 输出转换为 JSON 时,我仍然可以看到该列是字符串而不是位。我创建了一个包含所有示例数据的 rextester link。任何帮助将不胜感激!
我看不出您的 SQL 布局有任何问题,这正是您用于 XML 到 JSON 的转换工具处理位数据类型的方式.除非您使用 XML 架构定义 (XSD),否则 XML 不会清楚地划分数据类型,而 JSON 是强类型的,其中数字、布尔值、字符串、空字符串、空对象和空值都可以明确指定。因此,如果您查看下面的 xml 个元素,它可以是或:
<StringOrNumber>12345</StringOrNumber>
<StringOrBoolean>false</StringOrBoolean>
因此默认的 XML 到 JSON 转换将所有内容都视为字符串,因此您看到位 0/1 是字符串表示形式“0”和“1”。在您的中间件应用程序代码中,您必须使用以 xml & xsd 作为输入的转换库才能获得正确的 JSON 结果。
我对您的 SQL 进行了更正以使其可执行:
--Table 1 to store all answers
create Table #ans(qid int, ans varchar(50), aid varchar(10));
insert into #ans values
(1001,'test answer',null),
(1002,null,'a'),
(1003,null,'0'),
(1004,null,'1');
--Table 2 to pivot answers
create table #temp(cid int,[1001] varchar(50),[1002] varchar(10), [1003] bit, [1004] bit);
insert into #temp
select 12345,
max(case when qid = '1001' then a.ans end) as [1001],
max(case when qid = '1002' then a.aid end) as [1002],
max(case when qid = '1003' then a.aid end) as [1003],
max(case when qid = '1004' then a.aid end) as [1004]
from #ans a;
--Doing an XML final select
create table #final (xml_data varchar(max));
insert into #final
select
final_data =
(select
fakedata = 'something..',
question1 = t.[1001],
question2 = t.[1001],
question3 = t.[1003],
question4 = t.[1004]
from #temp t
FOR XML PATH(''));
select * from #ans;
select * from #temp;
select * from #final;
结果如下:
因此,如果您将此 online transformer 用于 xml 到 json 的转换器(当然它不需要 xsd 进行转换)。它会将您的 xml 数据转换为 json,如下所示:
<root>
<fakedata>something..</fakedata><question1>test answer</question1><question2>test answer</question2><question3>0</question3><question4>1</question4>
</root>
{
"fakedata": "something..",
"question1": "test answer",
"question2": "a",
"question3": "1",
"question4": "0"
}
而您需要以下 xsd 进行正确的转换:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="fakedata"/>
<xs:element type="xs:string" name="question1"/>
<xs:element type="xs:string" name="question2"/>
<xs:element type="xs:boolean" name="question3"/>
<xs:element type="xs:boolean" name="question4"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
{
"fakedata": "something..",
"question1": "test answer",
"question2": "a",
"question3": true,
"question4": false
}
我的存储过程工作流程如下:
- Table #ans(qid int, ans varchar(50), aid varchar(10))
- Table #temp1(cid int, [q1] 位)
- Table #final(XML_data varchar(max)
Rextester:http://rextester.com/PUX22792
temp1 table 有一个列 q1,它实际上是从 #ans table 和 aid 列分组的,它是 varchar。 q1 被声明为位,但它来自 varchar 列。所以在最后的 XML table 上,我 select 这一栏 [q1] 原样,当我将 XML 输出转换为 JSON 时,我仍然可以看到该列是字符串而不是位。我创建了一个包含所有示例数据的 rextester link。任何帮助将不胜感激!
我看不出您的 SQL 布局有任何问题,这正是您用于 XML 到 JSON 的转换工具处理位数据类型的方式.除非您使用 XML 架构定义 (XSD),否则 XML 不会清楚地划分数据类型,而 JSON 是强类型的,其中数字、布尔值、字符串、空字符串、空对象和空值都可以明确指定。因此,如果您查看下面的 xml 个元素,它可以是或:
<StringOrNumber>12345</StringOrNumber>
<StringOrBoolean>false</StringOrBoolean>
因此默认的 XML 到 JSON 转换将所有内容都视为字符串,因此您看到位 0/1 是字符串表示形式“0”和“1”。在您的中间件应用程序代码中,您必须使用以 xml & xsd 作为输入的转换库才能获得正确的 JSON 结果。
我对您的 SQL 进行了更正以使其可执行:
--Table 1 to store all answers
create Table #ans(qid int, ans varchar(50), aid varchar(10));
insert into #ans values
(1001,'test answer',null),
(1002,null,'a'),
(1003,null,'0'),
(1004,null,'1');
--Table 2 to pivot answers
create table #temp(cid int,[1001] varchar(50),[1002] varchar(10), [1003] bit, [1004] bit);
insert into #temp
select 12345,
max(case when qid = '1001' then a.ans end) as [1001],
max(case when qid = '1002' then a.aid end) as [1002],
max(case when qid = '1003' then a.aid end) as [1003],
max(case when qid = '1004' then a.aid end) as [1004]
from #ans a;
--Doing an XML final select
create table #final (xml_data varchar(max));
insert into #final
select
final_data =
(select
fakedata = 'something..',
question1 = t.[1001],
question2 = t.[1001],
question3 = t.[1003],
question4 = t.[1004]
from #temp t
FOR XML PATH(''));
select * from #ans;
select * from #temp;
select * from #final;
结果如下:
因此,如果您将此 online transformer 用于 xml 到 json 的转换器(当然它不需要 xsd 进行转换)。它会将您的 xml 数据转换为 json,如下所示:
<root>
<fakedata>something..</fakedata><question1>test answer</question1><question2>test answer</question2><question3>0</question3><question4>1</question4>
</root>
{
"fakedata": "something..",
"question1": "test answer",
"question2": "a",
"question3": "1",
"question4": "0"
}
而您需要以下 xsd 进行正确的转换:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="fakedata"/>
<xs:element type="xs:string" name="question1"/>
<xs:element type="xs:string" name="question2"/>
<xs:element type="xs:boolean" name="question3"/>
<xs:element type="xs:boolean" name="question4"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
{
"fakedata": "something..",
"question1": "test answer",
"question2": "a",
"question3": true,
"question4": false
}