65.9K
CodeProject 正在变化。 阅读更多。
Home

数据解析 SQL 到 JSON

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.98/5 (16投票s)

2014 年 9 月 5 日

CPOL

4分钟阅读

viewsIcon

122171

downloadIcon

15

数据解析 SQL 到 JSON。

引言

在本文中,我将讨论如何将一种类型的数据转换为另一种类型,然后再次重复该过程将该类型的数据转换为另一种形式。 基本上,数据转换或我更喜欢说数据解析有时会占据我们项目的全部焦点,因此本文定义了如何以及为什么。

目录

  • 概述
  • 引言
  • 要求
  • Procedure
    • 步骤:1
    • 步骤:2
    • 步骤:3
  • 摘要

概述

正如我上面提到的,本文全部关于数据转换,所以我将在整篇文章中讨论它。 我将采取一些演示片段来向您展示它的实际工作方式以及如何使用您的 SQL Server 和简单的 SQL 查询轻松地做到这一点。 如果有必要,我也会在本文中进一步演示需求。 因此,为了总结一下,我展示了一个简单的图表,让您了解本文的全部内容。

这是摘要图

正如该图表所说的,首先,我将采用 SQL Server 表格数据。 然后,我将其转换为一些 XML 数据,然后我将采用此 XML 数据将其转换为 JSON 格式(逗号分隔)。

引言

所以,现在最重要的一个问题是,为什么我们需要这个过程以及将简单的 SQL server 数据转换为 XML 和 JSON 格式的要求是什么?

这个问题的答案与数据转换过程本身一样简单。 因此,我将提到一些重要的知识和对我们的结构化 SQL server 数据执行此过程的要求。

要求

  • 在数据可视化过程中,我们需要简单的结构化数据以进行进一步的操作,因此我们需要简单 XML、JSON、CSV、TSV 或其他格式的数据
  • 在创建图表、示意图、数据图表时
  • 在数据操作中
  • 以简单的结构化格式存储数据
  • 对于工具所需的数据,因为某些工具接受某些预定义格式的数据以进行进一步的操作
  • 数据挖掘
  • 数据仓库

Procedure

我将整个过程分为两个单独的步骤进行数据转换。 这两个步骤如下

  • 表格数据
  • 表格数据转换为 XML 数据
  • XML 数据转换为 JSON 数据

步骤:1 | 表格数据

首先,我们需要在我们的表中提供一些数据,因此,我正在创建一个名为 <Shopping> 的参考表。

参考表

-- Creating a table

CREATE TABLE Shopping
(
Name NVARCHAR(50) not null,
TDate DATETIME not null,
Card_N0 INT not null,
Country NVARCHAR(50) not null,
Gender VARCHAR(10) not null,
Age INT not null,
TYear INT not null,
TMonth INT not null,
);

插入数据

-- Inserting Values

INSERT INTO Shopping
VALUES('Doremon', '2014-02-15', 987, 'USA', 'M', 32, 2014, 02);
INSERT INTO Shopping
VALUES('Dora', '2014-02-05', 123, 'FRA', 'F', 26, 2014, 02);
INSERT INTO Shopping
VALUES('Popeye', '2014-05-11', 487, 'IND', 'M', 32, 2014, 05);
INSERT INTO Shopping
VALUES('Minnie', '2014-06-27', 436, 'UK', 'F', 25, 2014, 06);
INSERT INTO Shopping
VALUES('July', '2014-09-16', 156, 'PR', 'F', 25, 2014, 09);
INSERT INTO Shopping
VALUES('Donald', '2014-12-19', 907, 'JP', 'M', 32, 2014, 12);
INSERT INTO Shopping
VALUES('Goofy', '2014-12-11', 023, 'AUS', 'M', 26, 2014, 12);

这是我们的演示表

[表格数据]

步骤:2 | 表格数据转换为 XML

现在我将把我们的表格数据转换为 XML 格式,为此,您需要编写这个简单的查询

-- Generating XML Data

 SELECT *
   FROM Shopping  
   FOR XML path, root;

这个简单的 SQL 查询将为您生成 XML 数据。 当您执行此查询时,您将获得类似以下的输出

[XML 数据]

在此输出窗口中,只需单击 <root>

这将重定向到下一个窗口,XML 数据将在那里等待您。

XML 数据将如下所示

<root>
  <row>
    <Name>Doremon</Name>
    <TDate>2014-02-15T00:00:00</TDate>
    <Card_N0>987</Card_N0>
    <Country>USA</Country>
    <Gender>M</Gender>
    <Age>32</Age>
    <TYear>2014</TYear>
    <TMonth>2</TMonth>
  </row>
  <row>
    <Name>Dora</Name>
    <TDate>2014-02-05T00:00:00</TDate>
    <Card_N0>123</Card_N0>
    <Country>FRA</Country>
    <Gender>F</Gender>
    <Age>26</Age>
    <TYear>2014</TYear>
    <TMonth>2</TMonth>
  </row>
  <row>
    <Name>Popeye</Name>
    <TDate>2014-05-11T00:00:00</TDate>
    <Card_N0>487</Card_N0>
    <Country>IND</Country>
    <Gender>M</Gender>
    <Age>32</Age>
    <TYear>2014</TYear>
    <TMonth>5</TMonth>
  </row>
  <row>
    <Name>Minnie</Name>
    <TDate>2014-06-27T00:00:00</TDate>
    <Card_N0>436</Card_N0>
    <Country>UK</Country>
    <Gender>F</Gender>
    <Age>25</Age>
    <TYear>2014</TYear>
    <TMonth>6</TMonth>
  </row>
  <row>
    <Name>July</Name>
    <TDate>2014-09-16T00:00:00</TDate>
    <Card_N0>156</Card_N0>
    <Country>PR</Country>
    <Gender>F</Gender>
    <Age>25</Age>
    <TYear>2014</TYear>
    <TMonth>9</TMonth>
  </row>
  <row>
    <Name>Donald</Name>
    <TDate>2014-12-19T00:00:00</TDate>
    <Card_N0>907</Card_N0>
    <Country>JP</Country>
    <Gender>M</Gender>
    <Age>32</Age>
    <TYear>2014</TYear>
    <TMonth>12</TMonth>
  </row>
  <row>
    <Name>Goofy</Name>
    <TDate>2014-12-11T00:00:00</TDate>
    <Card_N0>23</Card_N0>
    <Country>AUS</Country>
    <Gender>M</Gender>
    <Age>26</Age>
    <TYear>2014</TYear>
    <TMonth>12</TMonth>
  </row>
</root>

现在我们完成了一半。 现在,我们的下一个任务将把此 XML 数据转换为 JSON 格式。 因此,让我们继续。

步骤:3 | XML 数据转换为 JSON 数据

为了将 XML 数据转换为 JSON,有两个子步骤,这些步骤是

声明和绑定

这是第一个子步骤,对于此步骤,我们只需要编写一个简单的查询来声明和将 XML 数据绑定到其中。 为此,我们使用一些 declare 和 set 语句,如下所示

DECLARE @Shopping xml;
SET @Shopping =
'<?xml version="1.0" encoding="UTF-8"?>
<DATA goes here>’;

这是一个简单的演示

-- Declaration & Binding

DECLARE @Shopping xml;
SET @Shopping =
'<?xml version="1.0" encoding="UTF-8"?>

<root>
  <row>
    <Name>Doremon</Name>
    <TDate>2014-02-15T00:00:00</TDate>
    <Card_N0>987</Card_N0>
    <Country>USA</Country>
    <Gender>M</Gender>
    <Age>32</Age>
    <TYear>2014</TYear>
    <TMonth>2</TMonth>
  </row>
  <row>
    <Name>Dora</Name>
    <TDate>2014-02-05T00:00:00</TDate>
    <Card_N0>123</Card_N0>
    <Country>FRA</Country>
    <Gender>F</Gender>
    <Age>26</Age>
    <TYear>2014</TYear>
    <TMonth>2</TMonth>
  </row>
  <row>
    <Name>Popeye</Name>
    <TDate>2014-05-11T00:00:00</TDate>
    <Card_N0>487</Card_N0>
    <Country>IND</Country>
    <Gender>M</Gender>
    <Age>32</Age>
    <TYear>2014</TYear>
    <TMonth>5</TMonth>
  </row>
  <row>
    <Name>Minnie</Name>
    <TDate>2014-06-27T00:00:00</TDate>
    <Card_N0>436</Card_N0>
    <Country>UK</Country>
    <Gender>F</Gender>
    <Age>25</Age>
    <TYear>2014</TYear>
    <TMonth>6</TMonth>
  </row>
  <row>
    <Name>July</Name>
    <TDate>2014-09-16T00:00:00</TDate>
    <Card_N0>156</Card_N0>
    <Country>PR</Country>
    <Gender>F</Gender>
    <Age>25</Age>
    <TYear>2014</TYear>
    <TMonth>9</TMonth>
  </row>
  <row>
    <Name>Donald</Name>
    <TDate>2014-12-19T00:00:00</TDate>
    <Card_N0>907</Card_N0>
    <Country>JP</Country>
    <Gender>M</Gender>
    <Age>32</Age>
    <TYear>2014</TYear>
    <TMonth>12</TMonth>
  </row>
  <row>
    <Name>Goofy</Name>
    <TDate>2014-12-11T00:00:00</TDate>
    <Card_N0>23</Card_N0>
    <Country>AUS</Country>
    <Gender>M</Gender>
    <Age>26</Age>
    <TYear>2014</TYear>
    <TMonth>12</TMonth>
  </row>
</root>';

数据转换

对于数据转换,我们将使用两个简单的函数,两者都用于不同的功能,这些函数是

  • STUFF

    STUFF 函数将一个 string 插入到另一个 string 中。它删除第一个 string 中指定长度的字符,从起始位置开始,然后将第二个 string 插入到第一个 string 中的起始位置)。

  • COALESCE

    (对于结构化的逗号分隔数据)

    -- Function for Conversion | XML to JSON
    
    SELECT Stuff(  
      (SELECT * from  
        (SELECT ',
        {'+  
          Stuff((SELECT ',"'+coalesce(b.c.value('local-name(.)', 'NVARCHAR(MAX)'),'')+'":"'+
                        b.c.value('text()[1]','NVARCHAR(MAX)') +'"'
                   
                 from x.a.nodes('*') b(c)  
                 for xml path(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)')
            ,1,1,'')+'}' 
       from @Shopping.nodes('/root/*') x(a)  
       ) JSON(theLine)  
      for xml path(''),TYPE).value('.','NVARCHAR(MAX)' )
    ,1,1,'')

该操作将在输出窗口中为您提供此信息

[JSON 数据]

这只不过是您的 JSON 数据。 如果您在其他窗口中复制并粘贴,它将如下所示

      {"Name":"Doremon","TDate":"2014-02-15T00:00:00","Card_N0":"987",_
"Country":"USA","Gender":"M","Age":"32","TYear":"2014","TMonth":"2"}, 
       
          {"Name":"Dora","TDate":"2014-02-05T00:00:00","Card_N0":"123",_
          "Country":"FRA","Gender":"F","Age":"26","TYear":"2014","TMonth":"2"},   
          
             {"Name":"Popeye","TDate":"2014-05-11T00:00:00","Card_N0":"487",_
             "Country":"IND","Gender":"M","Age":"32","TYear":"2014","TMonth":"5"},   
             
                {"Name":"Minnie","TDate":"2014-06-27T00:00:00","Card_N0":"436",_
                "Country":"UK","Gender":"F","Age":"25","TYear":"2014","TMonth":"6"}, 
                 
                    {"Name":"July","TDate":"2014-09-16T00:00:00","Card_N0":"156",_
                    "Country":"PR","Gender":"F","Age":"25","TYear":"2014","TMonth":"9"}, 
                    
                         {"Name":"Donald","TDate":"2014-12-19T00:00:00","Card_N0":"907",_
                         "Country":"JP","Gender":"M","Age":"32","TYear":"2014","TMonth":"12"},  
                          
                            {"Name":"Goofy","TDate":"2014-12-11T00:00:00","Card_N0":"23",_
                            "Country":"AUS","Gender":"M","Age":"26","TYear":"2014","TMonth":"12"}

恭喜,您完成了。

摘要

这是一个简单的数据转换演示,从一种形式到另一种形式。 您可以通过编写代码行或使用 JSON 序列化来完成这些相同的操作。 除了所有这些,您还可以生成其他类型的数据。

我希望你会喜欢它,如果你在这个操作中遇到任何问题,请随时 ping 或消息我。 我很乐意回答你的问题。

© . All rights reserved.