【问题标题】:Auto generate JSON/XML from tabular sql result从表格 sql 结果自动生成 JSON/XML
【发布时间】:2017-12-04 04:16:40
【问题描述】:

我需要从表格结果生成 JSON/XML。在 MS SQL Server 中有内置函数:FOR XML AUTO

例如:

SELECT *
  FROM [Person] P
  LEFT JOIN CAR C ON P.id = C.PersonId
  FOR XML AUTO

结果我得到(开箱即用):

 <P id="1" Name="jan">
  <C id="1" Name="toyota" Type="osobowyu" PersonId="1" />
  <C id="2" Name="vw" Type="osobowyu" PersonId="1" />
</P>
<P id="2" Name="adam">
  <C id="3" Name="passat" Type="test" PersonId="2" />
</P>
<P id="3" Name="piotr">
  <C id="4" Name="kia" Type="test" PersonId="3" />
</P>

这很酷。我喜欢嵌套级别为每个 JOIN 自动显示。很酷的功能。

现在我想知道 postgres DB 是否有类似的东西?

感谢任何提示。

【问题讨论】:

    标签: sql sql-server json xml postgresql


    【解决方案1】:

    不,Postgres 没有任何类似的。有完整的 ANSI SQL/XML 支持和部分 ANSI SQL/JSON 支持。当您需要生成 XML 文档时,可以使用 XML 生成函数,例如:

    postgres=# select * from person; ┌────┬────────┐ │ 身份证 │ 姓名 │ ╞════╪═══════╡ │ 1 │ 一月 │ │ 2 │ piotr │ └────┴────────┘ (2 行) postgres=#从汽车中选择*; ┌────┬────────┬──────────┐ │ id │ 姓名 │ personid │ ╞════╪════════╪══════════╡ │ 1 │ 丰田 │ 1 │ │ 2 │ 大众 │ 1 │ │ 3 │ 起亚 │ 2 │ └────┴────────┴──────────┘ (3 行)
    select xmlelement(name p, xmlattributes(p.id, p.name),
                      xmlagg(xmlelement(name c, xmlattributes(c.id,
                                                              c.name,
                                                              c.personid))))
        from person p join car c on p.id = c.personid
        group by p.id, p.name;
    ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐
    │                                            xmlelement                                             │
    ╞═══════════════════════════════════════════════════════════════════════════════════════════════════╡
    │ <p id="1" name="jan"><c id="1" name="toyota" personid="1"/><c id="2" name="vw" personid="1"/></p> │
    │ <p id="2" name="piotr"><c id="3" name="kia" personid="2"/></p>                                    │
    └───────────────────────────────────────────────────────────────────────────────────────────────────┘
    

    (2 行)

    【讨论】:

    • 是的,谢谢,我知道这种方法。你知道它会如何处理非常大的数据集吗?假设我在服务器上有 8GB RAM,但结果是非常大的 10GB XML 文件。
    • @Snorlax - 生成的 XML 的最大大小为 1GB。对于更长的 XML,您必须编写客户端解决方案。
    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多