JSON是否有等价的XSLT ?它允许我对JSON进行转换,就像XSLT对XML所做的那样。


当前回答

我不太确定是否需要这样做,对我来说,缺乏工具意味着缺乏需求。JSON最好作为对象处理(无论如何在JS中是这样做的),并且您通常使用对象本身的语言来进行转换(Java用于从JSON创建的Java对象,同样用于Perl、Python、Perl、c#、PHP等)。只是普通的赋值(或set, get),循环等等。

我的意思是,XSLT只是另一种语言,需要它的一个原因是XML不是一种对象符号,因此编程语言的对象并不完全匹配(层次结构XML模型和对象/结构之间的阻抗)。

其他回答

jq——轻量级灵活的命令行JSON处理器

它不像XSLT那样基于模板,但更简洁。例如,将名称和地址字段提取到数组中:[.name, .address]

本教程介绍了一个转换Twitter JSON API的示例(手册中有很多示例)。

作为一个老问题的另一个新答案,我建议看看defantjs。它不是JSON的XSLT等价物,它是JSON的XSLT。文档的“模板”部分包括以下示例:

<!-- Defiant template -->
<script type="defiant/xsl-template">
    <xsl:template name="books_template">
        <xsl:for-each select="//movie">
            <xsl:value-of select="title"/><br/>
        </xsl:for-each>
    </xsl:template>
</script>

<script type="text/javascript">

var data = {
        "movie": [
            {"title": "The Usual Suspects"},
            {"title": "Pulp Fiction"},
            {"title": "Independence Day"}
        ]
    },
    htm = Defiant.render('books_template', data);

console.log(htm);
// The Usual Suspects<br>
// Pulp Fiction<br>
// Independence Day<br>

CsvCruncher

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

* Tabular表示JSON树的某些部分是规则的,即一个到多个相同或相似结构的条目。

CsvCruncher将树的这一部分转换为SQL表,然后您就有了完整的SQL语法来查询它。 您还可以加载多个JSON树,然后使用多个表。 您还可以将SQL结果存储为JSON(或CSV),然后再次处理它。

与真正复杂的XSLT方法相比,这种方法对我的帮助更大(尽管当您真正深入了解它时,它非常有趣)。

免责声明:我是CsvCruncher的开发者。

一种尚未给出的方法是使用解析器生成器在XSLT中创建解析器,解析JSON并生成XML输出。

在XML会议上被多次提及的一个选项是ReX解析器生成器(http://www.bottlecaps.de/rex/)——尽管在站点上完全没有文档记载,但是可以通过搜索找到菜谱。

说缺乏工具就意味着缺乏需求,这只是在回避问题。这同样适用于Linux中的X或Y支持(为什么要为这样一个少数操作系统开发高质量的驱动程序和/或游戏呢?为什么要关注一个大型游戏和硬件公司不会开发的操作系统?)可能需要使用XSLT和JSON的人最终会使用一种有点琐碎的解决方法:将JSON转换为XML。但这不是最优解,对吧?

当您有一个原生JSON格式,并且希望在浏览器中以“所见即所得”的方式编辑它时,XSLT将是一个非常合适的解决方案。用传统的javascript编程来实现这一点可能会让人头疼。

事实上,我已经实现了一种“石器时代”的XSLT方法,使用子字符串解析来解释javascript的一些基本命令,比如调用模板、子进程等。当然,使用JSON对象实现转换引擎要比实现成熟的XML解析器来解析XSLT容易得多。问题是,要使用XML模板转换JSON对象,您需要解析模板的XML。

要将JSON对象转换为XML(或HTML、文本或其他内容),您需要仔细考虑语法以及需要使用哪些特殊字符来标识转换命令。否则,您将不得不为自己的自定义模板语言设计一个解析器。走过这条路后,我可以告诉你,它并不漂亮。

Update (Nov 12, 2010): After a couple of weeks working on my parser, I've been able to optimize it. Templates are parsed beforehand and commands are stored as JSON objects. Transformation rules are also JSON objects, while the template code is a mix of HTML and a homebrew syntax similar to shell code. I've been able to transform a complex JSON document into HTML to make a document editor. The code is around 1K lines for the editor (it's for a private project so I can't share it) and around 990 lines for the JSON transformation code (includes iteration commands, simple comparisons, template calling, variable saving and evaluation). I plan to release it under a MIT license. Drop me a mail if you want to get involved.