将嵌套的 JSON 解析为 CSV

Posted

技术标签:

【中文标题】将嵌套的 JSON 解析为 CSV【英文标题】:Parsing nested JSON to CSV 【发布时间】:2021-08-31 02:49:42 【问题描述】:

我正在尝试使用 XSLT 转换。 在这种特殊情况下,每个子对象都从“数据表”计数,例如“结果表”和“资产负债表”应分别以一个 CSV 文件(输出)结束。不过,目前我只是在详细说明“结果表”而已。

我注意到数组的内容正在合并在一起。

数据:

<data>

  "datasheets": 
    "result-sheet": "bank": [1,3], "credit": [2,6],
    "balance-sheet": "loans": [4,5], "inventory": [9,0]
  

</data>

XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:map="http://www.w3.org/2005/xpath-functions/map"
    xmlns:array="http://www.w3.org/2005/xpath-functions/array"
  >

<xsl:output method="text" indent="yes"/>
<xsl:mode on-no-match="shallow-skip"/>

    <!-- Parse JSON to XML -->
    <xsl:template match="data">
          <xsl:apply-templates select="json-to-xml(.)"/>
    </xsl:template>

  <xsl:template match="*">
    <h2>Result sheet</h2>
    <xsl:text>&#xa;</xsl:text>
    <xsl:value-of select="*/(string-join(head(*)/*/@key, ','), *!string-join(*, ','))" separator="&#10;"/>
  </xsl:template>
</xsl:stylesheet>

结果:

Result sheet
bank,credit
13,26
45,90

想要的结果:

bank,credit
1, 2,
3, 6

【问题讨论】:

【参考方案1】:

我不太明白您希望在每一行中包含哪些数据,以下模板使用for-each-pairfn:map 的两个fn:array 子元素中的每对fn:number 元素上创建一行@keyresult-sheet

  <xsl:template match="*:map[@key = 'result-sheet']">
    <xsl:value-of select="for-each-pair(*:array[1]/*:number, *:array[2]/*:number, function($n1, $n2)  $n1 || ', ' || $n2 )"
      separator="&#10;"/>
  </xsl:template>

【讨论】:

以上是关于将嵌套的 JSON 解析为 CSV的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 在巨大的 CSV 中解析带有嵌套值的 JSON 列

使用 powershell 将嵌套的复杂 XML 解析为 CSV

如何使用 json2csv nodejs 模块将 JSON 对象解析为 CSV 文件

将动态嵌套 JSON 解析为 HTML 表

使用 pandas python 将嵌套的 JSON 解析为多个数据帧

Python-将多层 API JSON 解析为 CSV 的问题