JSON是否有等价的XSLT ?它允许我对JSON进行转换,就像XSLT对XML所做的那样。
当前回答
现在有了!我最近创建了一个库,json-transforms,正是为了这个目的:
https://github.com/ColinEberhardt/json-transforms
它结合使用了JSPath(一种模仿XPath的DSL)和一种直接受到XSLT启发的递归模式匹配方法。
这里有一个简单的例子。给定以下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属性的对象,输出模型和年份属性。最后一个是递归匹配的恒等变换。
其他回答
JSLT非常接近于XSLT的JSON等价物。这是一种转换语言,您可以用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实现的。
试着震动。它是一个用Java编写的JSON到JSON转换库。
它是专门创建的,因为我们不想玩“JSON -> XML -> XSLT -> XML -> JSON”的游戏,而且对任何足够复杂的转换使用模板是不可维护的。
看看jsonpath-object-transform
JSON的XSLT等价物——候选工具(工具和规范)列表
工具
1. XSLT
您可以将XSLT用于JSON,目的是实现fn: JSON -to-xml。
本节描述允许使用XSLT处理JSON数据的功能。
2. 金桥
jq就像JSON数据的sed一样——你可以用它来切片、过滤、映射和转换结构化数据,就像sed、awk、grep和其他一些朋友让你处理文本一样简单。 不同操作系统有不同的安装包。
3. jj
JJ是一个命令行实用程序,提供了从JSON文档检索或更新值的快速而简单的方法。它在底层由GJSON和SJSON提供支持。
4. 外汇
命令行JSON处理工具 不需要学习新的语法 纯JavaScript 格式和高亮显示 独立的二进制
5. CsvCruncher
基于sql的命令行表格数据处理工具 不需要学习新的语法 适用于JSON包含具有相似项的大型数组时 支持将多个文档作为多个SQL表处理 用Kotlin编写,在Java上运行 也可以作为Java库在Maven Central存储库中使用
6. jl
jl(“JSON lambda”)是一种用于查询和操作JSON的小型函数式语言。
7. 震动
用Java编写的JSON到JSON转换库,其中转换的“规范”本身就是一个JSON文档。
8. gron
使JSON易于获取! gron将JSON转换为离散的赋值,以便更容易地grep您想要的内容,并查看它的绝对“路径”。它简化了对返回大量JSON但文档糟糕的api的探索。
9. json-e
JSON-e是一个数据结构参数化系统,用于在JSON对象中嵌入上下文。 其核心思想是将数据结构视为“模板”,并使用另一个数据结构作为上下文对其进行转换,以产生输出数据结构。
10. JSLT
JSLT是一种完整的JSON查询和转换语言。语言设计的灵感来自jq、XPath和XQuery。
11. JSONata
JSONata是用于JSON数据的轻量级查询和转换语言。受到XPath 3.1的“位置路径”语义的启发,它允许用紧凑而直观的符号表示复杂的查询。
12. JSONPath多
分析、转换和选择性地从JSON文档(和JavaScript对象)中提取数据。 Jsonpath-plus扩展了原始规范,添加了一些额外的操作符,并显式地显示了原始规范没有阐明的一些行为。
13. 2017年12月1日
提供一种递归的模式匹配方法来转换JSON数据。转换被定义为一组匹配JSON对象结构的规则。当发生匹配时,规则发出转换后的数据,可选地递归转换子对象。
14. 最后提交2018年6月23日
json是一个使用json的快速CLI工具。它是一个单文件node.js脚本,没有外部deps(除了node.js本身)。
15. jsawk最后提交2015年3月4日
Jsawk类似于awk,但用于JSON。您使用从stdin读取的JSON对象数组,使用JavaScript对它们进行过滤,生成输出到stdout的结果数组。
16. 2017年3月13日
测试可以作为文档https://github.com/pasaran/yate/tree/master/tests使用
17. jsonpath-object-transform最后提交2017年1月18日
使用JSONPath从对象文字中提取数据,并基于模板生成一个新对象。
18. 装订最后提交2013年9月16日
Stapling是一个JavaScript库,支持JSON对象的XSLT格式。 与使用JavaScript模板引擎和文本/html模板不同,Stapling让您有机会使用XSLT模板(使用Ajax异步加载,然后在客户端缓存)来解析JSON数据源。
规格:
Json指针
JSON Pointer定义了用于标识特定值的字符串语法 在JavaScript对象表示法(JSON)文档中。
JsonPath
JSONPath表达式总是引用JSON结构,就像XPath表达式与XML文档结合使用一样
JSPath
JSPath for JSON就像XPath for XML。”
JSONiq
JSONiq背后的主要灵感来源是XQuery,到目前为止,它已被证明是一种用于半结构化数据的成功且高效的查询语言
杰梅斯帕斯
JMESPath是一种JSON的查询语言。JMESPath语言是用ABNF语法和完整的规范描述的。
很久以前,我为我的基于jackson的json处理框架写了一个dom适配器。它用了。xom图书馆。生成的dom树可以使用java xpath和xslt工具。我做了一些非常简单的实现选择。例如,根节点总是被称为“root”,数组进入一个带有li子元素的ol节点(就像在html中一样),而其他一切都只是一个带有原始值或另一个对象节点的子节点。
JsonXmlConverter.java
用法: JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, “root”);
推荐文章
- 查询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查找节点是否存在