我正在编写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对象以删除值中的引号。
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值。
JSON数据希望值为以下没有引号的JSON路径。
{
"name":title,
"info":description,
"data":{
"text":blog,
"date":date
}
}
{ "name":title, "info":description, "data":{ "text":blog, "date":date } }
,除非title
、description
…… 是已经声明的变量。 - brk