我正在编写 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);
});
map 变量包含以下内容
{
"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 值有对象等时复杂性会增加。并且','应该放在每组键值对之间。
我找到了一些使用正则表达式的解决方案,但该解决方案仅针对 JSON 值中的数值。在这里,它应该适用于所有 JSON 值
JSONdata 期望值是没有引号的 JSON 路径,如下所示。
{
"name":title,
"info":description,
"data":{
"text":blog,
"date":date
}
}