我有一个要求,我想将内部表数据转换为JSON格式。
假设我的内部表名是ZEMPLOYEE,其中的字段是EMPID,ENAME,ESAL。 普通调用转换会将其转换为以下格式。
数据 - [{EMPID:101,ENAME:'ABCD',ESAL:100},{EMPID:102,ENAME:'EFGH',ESAL:200},{EMPID:103,ENAME:'IJKL',ESAL :300}]
但我的要求是输出格式应如下所示:
数据 - [{EMPID,ENAME,ESAL},{101,ABCD,100},{102,EFGH,200},{103,IJKL,300}] ......
第一个花括号将包含我的表格的字段,其余花括号包含实际数据。
有人可以帮助我使用XSLT转换或简单转换来实现上述输出吗?
答案 0 :(得分:0)
您向我们展示的内容更接近于CSV而非JSON。尝试类似:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/*">
<!-- header -->
<xsl:text>Data-[{</xsl:text>
<xsl:for-each select="*[1]/*">
<xsl:value-of select="local-name()"/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>},</xsl:text>
<!-- data -->
<xsl:for-each select="*">
<xsl:text>{</xsl:text>
<xsl:for-each select="*">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>}</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>]</xsl:text>
</xsl:template>
</xsl:stylesheet>
当应用于格式正确(!)输入示例时:
<FLIGHT_TABLE>
<ZSCARR_LINE>
<CARRID>AA</CARRID>
<CARRNAME>American Airlines</CARRNAME>
<CURRCODE>USD</CURRCODE>
</ZSCARR_LINE>
<ZSCARR_LINE>
<CARRID>AB</CARRID>
<CARRNAME>Air Berlin</CARRNAME>
<CURRCODE>EUR</CURRCODE>
</ZSCARR_LINE>
<ZSCARR_LINE>
<CARRID>AC</CARRID>
<CARRNAME>Air Canada</CARRNAME>
<CURRCODE>CAD</CURRCODE>
</ZSCARR_LINE>
<ZSCARR_LINE>
<CARRID>AF</CARRID>
<CARRNAME>Air France</CARRNAME>
<CURRCODE>EUR</CURRCODE>
</ZSCARR_LINE>
</FLIGHT_TABLE>
结果将是:
Data-[{CARRID,CARRNAME,CURRCODE},{AA,American Airlines,USD},{AB,Air Berlin,EUR},{AC,Air Canada,CAD},{AF,Air France,EUR}]