将嵌套的 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>
</xsl:text>
<xsl:value-of select="*/(string-join(head(*)/*/@key, ','), *!string-join(*, ','))" separator=" "/>
</xsl:template>
</xsl:stylesheet>
结果:
Result sheet
bank,credit
13,26
45,90
想要的结果:
bank,credit
1, 2,
3, 6
【问题讨论】:
【参考方案1】:我不太明白您希望在每一行中包含哪些数据,以下模板使用for-each-pair
在fn:map
的两个fn:array
子元素中的每对fn:number
元素上创建一行@key
是result-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=" "/>
</xsl:template>
【讨论】:
以上是关于将嵌套的 JSON 解析为 CSV的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas 在巨大的 CSV 中解析带有嵌套值的 JSON 列
使用 powershell 将嵌套的复杂 XML 解析为 CSV
如何使用 json2csv nodejs 模块将 JSON 对象解析为 CSV 文件