【发布时间】:2020-01-11 10:16:41
【问题描述】:
我正在编写 REST API 以使用 JSONata 之类的库执行转换。
API 接收一个 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"
}
}
Node.JS 代码如下。
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);
});
地图变量包含以下内容
{
"name":"title",
"info":"description",
"data":{
"text":"blog",
"date":"date"
}
}
JSONdata 期望值为 JSON 路径,不带引号,如下所示。
{
"name":title,
"info":description,
"data":{
"text":blog,
"date":date
}
}
请建议仅在所有 JSON 值中删除引号的最佳选项。
我编写函数通过迭代 JSON 对象来删除 value 中的引号。
function jsoniterate(map) {
Object.keys(map).forEach(key => {
console.log(map[key]);
if (typeof (map[key]) == 'object') {
arr1.push('"' + key + '": {');
jsoniterate(map[key]);
arr1.push('}');
}
else {
arr1.push('"' + key + '":' + map[key]);
}
});
}
但是当 JSON 值有 object 等时复杂度会增加。 并且 ',' 应该放在每组键值对之间。
我找到了一些使用正则表达式的解决方案,但该解决方案仅针对 JSON 值中的数值。在这里,它应该适用于所有 JSON 值
JSONdata 期望值为 JSON 路径,不带引号,如下所示。
{
"name":title,
"info":description,
"data":{
"text":blog,
"date":date
}
}
【问题讨论】:
-
不确定,但这个
{ "name":title, "info":description, "data":{ "text":blog, "date":date } }似乎是错误的,除非title,description.... 是变量声明 -
标题和描述是数据JSON中的JSON路径。数据 JSON 如下所示。 "data":{ "title":"title1", "description":"description1", "blog":"This is a blog.", "date":"11/4/2013" } 请找样本@ 987654322@
-
会告诉它没用 - 您可以使用与键名非常相似的字符串,但是如果您设置前缀和后缀怎么办 - 一些不应该在其他任何地方的字符或组合然后用字符串化的 json 替换它们?
-
一些解析器代码也可以提供帮助——通常有非常简单的递归字符串化方法。例如我翻译成 C# 的 Gason C++。这里github.com/eltomjan/Gason/blob/master/src/ValueWriter.cs方法DumpValue打印json...
标签: javascript node.js json jsonata