1

我需要在 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 预期的地图对象如下所示。

{
  "name": title,
  "info": description,
  "some" : {
 "text": blog,
  "date": date
  }

}

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

请找到 NodeJS API 代码。

app.post('/JSONTransform', function(req, res, next) 
{
const data = req.body.data;
const map = req.body.map;
var expression = jsonata(map);
var result = expression.evaluate(data);
res.send(result);
});

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

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

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

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

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

谢谢

拉吉

4

1 回答 1

1

我找到了解决这个问题的方法。

传递具有数据和地图的单个 JSON。由于 MAP 不是有效的 JSON,我将整个地图制作为字符串并转义了字符串内的双引号。

请找到样品。

{
  "map": "{   \"name\": title,   \"info\": description,   \"data\": {      \"text\": blog,      \"date\": date    }}",
  "data": {
    "title": "title1",
    "description": "description1",
    "blog": "This is a blog.",
    "date": "11/4/2013"
  }
}
于 2019-08-29T18:44:05.237 回答