问题标签 [jsonata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1210 浏览

node.js - JSONata - Nodejs API 中的 JSON 到 JSON 的转换

我需要在 Node js 中编写 REST API 以进行 JSON 到 JSON 的转换。

有很多图书馆,我排序列出“JSONata”

请在此处找到 JSONata 简单示例

挑战是 API 接收具有数据和地图的 JSON,但 JSONata 需要不带引号的地图值。

{ "data" : { "title" : "title1", "description": "description1", "blog": "This is a blog.", "date": "11/4/2013" }, "map" : { "name": "title", "info": "description", "data" : { "text": "blog", "date": "date" } } } 但 JSONata 预期的地图对象如下所示。

}

上面的 JSON 键在引号和没有引号的值中。

请找到 NodeJS API 代码。

我可以编写简单的函数来删除引号,但上面的地图是简单的例子。它可以是任何子对象,并且可能在值中包含一些特殊字符,包括引号。

我更喜欢一些 npm 库或标准方法来删除引号或配置 JSONata 以接受值中的引号。

如果您建议任何其他库或选项,请不胜感激。

此 Node JS API 是从 ASP.NET Core Web API 调用的。ASP.NET Core Web API 从数据库中获取数据和映射,并将其作为单个 JSON 传递给 Node JS API。

请建议解决此问题或最佳替代方案。

谢谢

拉吉

0 投票
2 回答
1234 浏览

javascript - 如何从所有 JSON 值中删除引号,并且不删除 Node JS 中 JSON 键中的引号

我正在编写 REST API 以使用JSONata 之类的库执行转换。

API 接收一个 JSON,其中包含如下所示的数据和地图。这是一个简单的例子。

Node.JS 代码如下所示。

map 变量包含以下内容

JSONdata 期望值是没有引号的 JSON 路径,如下所示。

请建议仅在所有 JSON 值中删除引号的最佳选项。

我编写函数通过迭代 JSON 对象来删除 value 中的引号。

但是当 JSON 值有对象等时复杂性会增加。并且','应该放在每组键值对之间。

我找到了一些使用正则表达式的解决方案,但该解决方案仅针对 JSON 值中的数值。在这里,它应该适用于所有 JSON 值

JSONdata 期望值是没有引号的 JSON 路径,如下所示。

0 投票
1 回答
896 浏览

javascript - 合并两个 JSONata 表达式

我正在使用 JSONata 执行 JSON 到 JSON 的转换。

由于一些独特的原因,我想合并两个 JSONata 表达式:

举个例子 :

父表达式:

我也有一些简单的 JSONata 表达式,例如:

表达式 1:

表达式 2:

我想将以上两个表达式添加到使用定义的表达式中script

所以在添加这两个表达式之后,我应该能够得到:

如何使用 javascript/JSONata ?

背景和限制:

  1. 子表达式(示例中的表达式 1 和 2)(应该添加到父表达式中)将始终是简单的赋值,例如"a" : x.y.z or "b" : x.

  2. 子表达式可能已经存在于父表达式中。在这种情况下,它取代了赋值。

  3. 我还想从父表达式(ofcouse,如果存在)中删除一些 json 路径,例如 If delete path data.Email

我做了什么 ?:

  • 我尝试通过将值放在双引号下并使用 escape() 函数编码值来将 JSONata 脚本转换为 JSON。
  • 拥有 JSON 后,我会查找子表达式中提到的路径(如 data.Email)

    • 如果路径存在:替换它的值
    • 如果路径不存在:创建路径并赋值
    • 如果路径应该被删除:只需删除它。
  • 一旦我完成了 JSON 之上的处理,我通过使用一堆正则表达式删除引号,然后应用 unescape() 方法进行解码,将其转换为 JSONata 脚本。

  • 这种方法的问题是:

    • 它不可靠(正则表达式匹配和替换不是完全证明)
    • 我不确定是否每个 JSONata(未声明任何函数)都可以始终转换为有效的 JSON。
0 投票
0 回答
99 浏览

java - 如何在 CARML 中使用 JSONata?

请问是否有人尝试在CARMLhttps://github.com/carml/carml )中使用JSONata4Java

它需要实现getSourceIterator()getExpressionEvaluatorFactory(),它们位于com.taxonic.carml.logical_source_resolver包的LogicalSourceResolver接口中。

有什么想法/方向吗?

0 投票
1 回答
1528 浏览

jsonata - 如何使用 jsonata 返回多个对象,分配第一个键/值,始终为 dateTime,其余键变化

如何使用jsonata进行转换:

变成一系列只包含 {"dateTime":"2019-10-19T12:53:54.043Z", key[1]:value[1]},{"dateTime":"2019-10-19T12 两个键的对象:53:54.043Z",key[2]:value[2]} 如以下:

第一个键始终是 dateTime,其他键会有所不同,我想按 dateTime 分解所有其他键/值?这里的 Reactor3.Level、Reactor3.Temp、Reactor3.Press 只是会改变的示例。

编辑:在下面,我添加了我的问题的更通用版本。我本质上是在寻找一个 JSONata 查询来转换这个输入:

其中键“TS”是每组中的第一个键,其他键会有所不同。并将其转换为以下输出:

[已解决] SteveR 在下面解决了我的问题,我只想在此处添加一个 Node-RED “有效负载”友好版本的解决方案:链接:http ://try.jsonata.org/HJCjoHxoS

负载修改 JSONata:

再次感谢@SteveR

0 投票
1 回答
239 浏览

node-red - JSONata Node-RED 节点。在哪里可以找到

我刚刚观看了 IBM 的 Andrew Coleman 制作的关于 JSONata 的 Youtube 视频https://www.youtube.com/watch?v=ZRtlkIj0uDY

在视频中,Andrew 预览了他正在运行的包含 JSONata 节点的 Node-RED 实例。

我已经搜索了这个 JSONata 节点的高低,因为我真的很想把它用在我的一些更复杂的流程中,这些流程定义了我的外部 API 和 WebHook 端点。

我确实node-red-contrib-tgr-jsonata在托盘选项中找到了这个,但它不是同一个,我无法让它以一种可用的方式工作。

有人知道我在哪里可以下载此视频中显示的 JSONata 节点吗?

0 投票
2 回答
443 浏览

jsonata - 查找包含文本的字段并将其替换为另一个文本

在下面的 JSON 示例中,如何查找包含字符串“Choice”的所有元素并将它们替换为另一个字符串,例如“Grade”。因此,下面所有字段名称“***Choice”应更改为“***Grade”。

我在下面粘贴了预期的输出。鉴于我不知道有多少字段将包含字符串“Choice”,我不想简单地[$in ~> | ** [firstChoice] | {"firstGrade": firstChoice}, ["firstChoice"] | ;]直接查找和替换。

预期产出

0 投票
1 回答
79 浏览

jsonata - Does flowgrounds JSONata expressions support regex?

I'm trying to build a fairly complex expression with a CBR where I try to identify if a string contains another string. In order to do so I need to manipulate the second string and use a little bit of regex magic but it doesn't seem to work. Could anyone confirm if the JSONata implementation of flowground support regex inside a "contains" operation? The expression I am using right now is the following:

0 投票
1 回答
720 浏览

jsonata - Jsonata,合并对象数组

我有一组对象,我想使用 jsonata 表达式重新格式化

所需格式

有一个简单的班轮吗?我开始使用将时间合并到消息对象中,$merge([$.items.message, {"time":$.items.time}])但他给了我

我发现文档很难遵循。如何从迭代合并两个对象开始?

0 投票
1 回答
348 浏览

arrays - JSONata - 基于共享值删除数组中的重复对象

这是一个电子商务用例,我需要消耗一天内的所有订单,生成单个订单标题,并列出订单项的汇总摘要。这意味着我需要根据共享值 (sku) 对订单项对象数组进行重复数据删除。我还需要根据相同的值对某些字段(数量、总购买价格)求和。

示例输入:

期望的输出:

我知道我可以使用 $distinct() 获得一组 skus,但我不知道如何生成完全不同的对象并保留其值。

我认为我不能应用合并,因为对象的某些部分(数量)不是唯一的,而且我不知道如何仅在对象本身的某些字段上进行合并。

最后,我在一个没有代码片段的平台上工作,所以我不能调用 javascript。这在纯 JSONata 中可能吗?