JSON的XSLT等效方法

518

是否有针对JSON的XSLT等效工具? 让我可以像XSLT将XML转换一样在JSON上进行转换。


9
XSLT是一种标准,许多语言和平台都有实际的实现,我的问题是针对类似的努力。 - luvieere
55
对于你的问题点赞。许多人似乎忽视或者纯粹不喜欢XSLT,但这可能只是对XML冗长性的反应。随着XML逐渐失宠,使用XSLT的机会也越来越少,这很遗憾!如果有一个JSON的等效XSLT将是很棒的。 - Nicolas Le Thierry d'Ennequin
13
@NicolasLeThierryd'Ennequin 同意。很多人讨厌XML,因此忽视了XSLT。XML工具生态系统也以Java开发人员为主,这使更多人望而却步。但在2000年代中期我非常熟悉XSLT,在XML生态系统之外没有直接等效的强大功能。我希望有一个JSON的等效物! - Zearin
1
@NicolasLeThierryd'Ennequin:请查看以下链接:https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10或者https://jsfiddle.net/YSharpLanguage/ppfmmu15/10或者https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 - YSharp
4
我强烈反对关闭这个答案。简单的改写就足够了:“如何使用声明式的方式重构JSON?” - Gregory Higley
显示剩余10条评论
24个回答

0

还有一种方法尚未提及,那就是使用解析器生成器在XSLT中创建一个解析器,用于解析JSON并生成XML输出。

在XML会议上经常提到的一个选项是ReX解析器生成器(http://www.bottlecaps.de/rex/)-虽然网站上完全没有文档,但可以通过搜索获得相关信息。


0
可能可以使用 XSLT 处理 JSON。XPath(3.1 版本)、XSLT(3.0 版本)和 XQuery(3.1 版本)的第三版某种程度上支持 JSON。这似乎只在 Saxon 商业版中可用,并且可能在 HE 版本中的某个时候包括此功能。 https://www.saxonica.com/html/documentation/functions/fn/parse-json.html

-

我对替代方案的期望:

我希望能够输入JSON以获取匹配的数据集,并输出JSON或TEXT。

访问任意属性并评估其值

支持条件逻辑

我希望转换脚本是外部工具,基于文本,并且最好使用常用语言。

可能的替代方案?

我想知道SQL是否可以作为一个合适的替代方案。 https://learn.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server

如果替代工具能够处理JSON和XML就更好了 https://learn.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server

我还没有尝试将我使用的XSLT脚本转换为SQL,也没有完全评估这个选项,但我希望很快能够更深入地研究它。这只是一些初步想法。


0

CsvCruncher

尽管它的名字并不表明,但CsvCruncher可以高效地用于读取表格JSON数据,并使用SQL处理它们。

* 表格意味着JSON树的某些部分是规则的,即具有相同或相似结构的一对多条目。

CsvCruncher将树的此部分转换为SQL表,然后您就可以利用完整的SQL语法进行查询。
您还可以加载多个JSON树,然后拥有多个可操作的表格。
您还可以将SQL结果存储为JSON(或CSV),然后再次处理它。

这比真正复杂的XSLT方法对我更加有用(尽管当您真正深入了解它时,它非常有趣)。

声明:我是CsvCruncher的开发人员。


-4

我不太确定是否需要这个,对我来说缺乏工具意味着没有必要。JSON最好作为对象进行处理(以JS的方式),通常使用对象本身的语言来进行转换(Java用于从JSON创建的Java对象,Perl、Python、Perl、c#、PHP类似)。只需使用常规赋值(或设置、获取)、循环等操作即可。

我的意思是,XSLT只是另一种语言,它被需要的一个原因是XML不是对象表示法,因此编程语言的对象与XML之间存在阻抗匹配问题(分层XML模型和对象/结构之间)。


你考虑的使用场景是什么?是为了能够呈现类似于将XML响应呈现为HTML的JSON内容吗?还是其他什么东西? - StaxMan
我想知道如何通过编程对象方式(包括循环、分支等)来操作JSON转换,相对于使用XSLT类型的方法,特别是在转换大型JSON对象时,以及源JSON中的某些数据在目标JSON中上下移动节点(因此不仅仅是结构的直接复制),并且说源或目标JSON中的特定节点是JSON内的对象数组的一部分,而另一个JSON(源/目标)则不是。 - David
便捷性是非常主观的,所以我怀疑很大程度上取决于一个人习惯了什么。 - StaxMan
尽管确实需要进行JSON转换,但你说得对,JS可以很好地实现它。 :-) 但是你看过 jq - 轻量级且灵活的命令行JSON处理器 吗?特别是在JS不可用的情况下。我认为,与JS相比,转换会更加简单直观。例如,提取名称和地址字段,并将它们放入一个数组中:[.name, .address] - 13ren
我建议删除这个回答,因为它不是一个答案,而是对于提问者需求的猜测和争论。 - Ondra Žižka
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接