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的示例(手册中有很多示例)。
Yate (https://github.com/pasaran/yate)是在XSLT之后专门设计的,具有JPath (JS的自然XPath对等物),可以编译为JavaScript,并且在生产中有相当长的使用历史。它实际上没有记录,但阅读样本和测试应该足够了。
一种尚未给出的方法是使用解析器生成器在XSLT中创建解析器,解析JSON并生成XML输出。
在XML会议上被多次提及的一个选项是ReX解析器生成器(http://www.bottlecaps.de/rex/)——尽管在站点上完全没有文档记载,但是可以通过搜索找到菜谱。
作为一个老问题的另一个新答案,我建议看看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>
有关利用纯JavaScript的方法以及XSLT匹配表达式和递归模板背后熟悉的声明式模式的工作演示/概念证明,请参见https://gist.github.com/brettz9/0e661b3093764f496e36
(JSON也可以采用类似的方法。)
注意,为了方便在Firefox中表达模板,演示还依赖于JavaScript 1.8表达式闭包(至少在实现方法的ES6简写形式之前是如此)。
免责声明:这是我自己的代码。
推荐文章
- 查询JSON类型内的数组元素
- 将JSON字符串转换为HashMap
- 将JsonNode转换为POJO
- Json_encode()转义正斜杠
- c# vs Java Enum(适合c#新手)
- 如何写一个JSON文件在c# ?
- 如何在XSLT中实现if-else语句?
- 在序列化和反序列化期间JSON属性的不同名称
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- Ajax会调用什么样的响应,比如'for (;;);{json data}的意思?
- 在JavaScript中将JSON字符串解析为特定对象原型
- 使用Jackson将JSON字符串转换为漂亮的打印JSON输出
- jQuery。由于转义了JSON中的单引号,parseJSON抛出“无效JSON”错误
- 用c#解析JSON
- XPath查找节点是否存在