是否有针对JSON的XSLT等效工具? 让我可以像XSLT将XML转换一样在JSON上进行转换。
是否有针对JSON的XSLT等效工具? 让我可以像XSLT将XML转换一样在JSON上进行转换。
const json = {
"automobiles": [
{ "maker": "Nissan", "model": "Teana", "year": 2011 },
{ "maker": "Honda", "model": "Jazz", "year": 2010 },
{ "maker": "Honda", "model": "Civic", "year": 2007 },
{ "maker": "Toyota", "model": "Yaris", "year": 2008 },
{ "maker": "Honda", "model": "Accord", "year": 2011 }
]
};
这里有一个变换:
const jsont = require('json-transforms');
const rules = [
jsont.pathRule(
'.automobiles{.maker === "Honda"}', d => ({
Honda: d.runner()
})
),
jsont.pathRule(
'.{.maker}', d => ({
model: d.match.model,
year: d.match.year
})
),
jsont.identity
];
const transformed = jsont.transform(json, rules);
{
"Honda": [
{ "model": "Jazz", "year": 2010 },
{ "model": "Civic", "year": 2007 },
{ "model": "Accord", "year": 2011 }
]
}
Honda
属性的对象,然后递归匹配。第二个规则匹配任何具有 maker
属性的对象,输出 model
和 year
属性。最后一个是递归匹配的身份转换。我已经非常厌倦了市面上众多的JavaScript模板引擎,它们的内联HTML模板、不同的标记样式等等,于是决定构建一个小型库,使得JSON数据结构可以使用XSLT格式化。这并不需要什么高深的技术--只是将JSON解析为XML,并使用XSLT文档进行格式化。它速度也很快,在Chrome浏览器中可能没有JavaScript模板引擎那么快,但对于更大的数据结构,在大多数其他浏览器中它至少与JavaScript引擎替代方案的速度相当。
JSLT非常接近于JSON等效的XSLT。这是一种转换语言,您可以在其中使用JSON语法编写输出的固定部分,然后插入表达式来计算要插入模板中的值。
一个例子:
{
"time": round(parse-time(.published, "yyyy-MM-dd'T'HH:mm:ssX") * 1000),
"device_manufacturer": .device.manufacturer,
"device_model": .device.model,
"language": .device.acceptLanguage
}
它是基于Jackson在Java上实现的。
使用XSLT转换JSON是非常可能的:您需要JSON2SAX反序列化程序和SAX2JSON序列化程序。
以下是Java示例代码: http://www.gerixsoft.com/blog/json/xslt4json
Yate(https://github.com/pasaran/yate)是专门为XSLT设计的,具有JPath功能(JS的自然XPath等效功能),编译成JavaScript并且有相当长时间的生产使用历史。它几乎没有文档记录,但是阅读示例和测试应该足够了解。
为了展示一种利用纯JavaScript以及XSLT匹配表达式和递归模板背后熟悉的声明式模式的方法的工作涂鸦/概念证明,请参见https://gist.github.com/brettz9/0e661b3093764f496e36
(JSON也可以采用类似的方法。)
请注意,演示还依赖于JavaScript 1.8表达式闭包,以方便在Firefox中表达模板(至少在ES6方法的简短形式被实现之前)。
免责声明:这是我自己的代码。
使用方法:
JsonObject sampleJson = sampleJson();
org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");