JSON是否有等价的XSLT ?它允许我对JSON进行转换,就像XSLT对XML所做的那样。
当前回答
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语法和完整的规范描述的。
其他回答
现在有了!我最近创建了一个库,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属性的对象,输出模型和年份属性。最后一个是递归匹配的恒等变换。
作为一个老问题的另一个新答案,我建议看看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>
可以将XSLT与JSON结合使用。 XPath(3.1)、XSLT(3.0)和XQuery(3.1)的Verson 3在某种程度上支持JSON。 这似乎在Saxon的商业版本中可用,并且可能在某个时候包含在HE版本中。 https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
我对另一种解决方案的期望是:
我想要能够输入JSON获取一组匹配的数据,并输出JSON或文本。
访问任意属性并计算值
支持条件逻辑
我希望转换脚本来自于工具的外部,基于文本,最好是一种常用的语言。
潜在的替代吗?
我想知道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,也没有完全评估这个选项,但我希望很快就会研究它。目前只是一些想法。
Yate (https://github.com/pasaran/yate)是在XSLT之后专门设计的,具有JPath (JS的自然XPath对等物),可以编译为JavaScript,并且在生产中有相当长的使用历史。它实际上没有记录,但阅读样本和测试应该足够了。
我最近发现了一个我喜欢的JSON样式工具:https://github.com/twigkit/tempo。非常容易使用的工具——在我看来,使用它比使用XSLT容易得多——不需要XPATH查询。
推荐文章
- 在ASP中设置Access-Control-Allow-OriginNet MVC -最简单的方法
- JWT vs cookie用于基于令牌的身份验证
- JQ:选择多个条件
- 什么是HTTP中的“406-不可接受的响应”?
- ASP。NET Core返回带有状态码的JSON
- 我如何添加环境变量启动。VSCode中的json
- PostgreSQL返回JSON数组的结果集?
- HTTP POST在Java中使用JSON
- 如何指定杰克逊只使用字段-最好是全局
- jQuery为ajax请求返回“parsererror”
- 检查Postgres JSON数组是否包含字符串
- 将bash变量传递给jq
- 在$.ajax()中将数组传递给ajax请求
- 转换JSON字符串到c#对象
- Jackson -使用泛型类反序列化