gpt4 book ai didi

javascript - 检查 Node.js 中的值是否可以序列化为 JSON

转载 作者:行者123 更新时间:2023-12-03 02:32:22 24 4
gpt4 key购买 nike

我有这个代码:

function evaluate(expression, context, callback)
{
try {
var evaluated = safeEval(expression, context);
callback(JSON.stringify({data: evaluated}));
} catch(err) {
callback(JSON.stringify({error: err.name + ': ' + err.message}));
}
}

这里的回调代表一些接受编码为字符串格式的任意 JSON 数据的函数。

我想以某种方式处理当evaluated碰巧无法序列化为JSON时的情况(例如,如果它是undefinedfunction或其他)否则无法正确序列化)。我怎样才能做到这一点?

UPD:意外行为的小例子:

evaluate("a.b", {a:{}}, function(s){console.log(s);});    // Logs '{}', but should throw

最佳答案

根据评论,您可以检查evaluated本身是否可以字符串化,或者ti是否会返回undefined。如果可以字符串化,您可以使用 '{"data":'+stringified+'}' 完成最终的 json 响应。执行此连接很省事,因为 stringified 将是有效的 JSON 值。

function evaluate(expression, context, callback) {
try {
var evaluated = safeEval(expression, context);
var stringified = JSON.stringify(evaluated);

if (typeof stringified === 'undefined') {
throw new Error('could not be stringified');
}

callback('{"data":' + stringified + '}');
} catch (err) {
callback(JSON.stringify({
error: err.name + ': ' + err.message
}));
}
}

如果响应更复杂,并且包含更多的 data 字段,那么此解决方案可能会更好:

function evaluate(expression, context, callback) {
try {
var evaluated = safeEval(expression, context);
var stringified = JSON.stringify({
data: evaluated
});

if (typeof JSON.parse(stringified).data === 'undefined') {
throw new Error('could not be stringified');
}

callback(stringified);
} catch (err) {
callback(JSON.stringify({
error: err.name + ': ' + err.message
}));
}
}

关于javascript - 检查 Node.js 中的值是否可以序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48681406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com