Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 位置0处JSON中“意外令牌A”的解决方案`_Javascript_Json_Node.js_String_Web - Fatal编程技术网

Javascript 位置0处JSON中“意外令牌A”的解决方案`

Javascript 位置0处JSON中“意外令牌A”的解决方案`,javascript,json,node.js,string,web,Javascript,Json,Node.js,String,Web,这是我面临的常见错误之一。我想知道是否有办法解决这个问题 let a = (str) => { try { return JSON.parse(str); } catch (e) { return e; } } a()将字符串解析为JSON并返回。如果我们永远不能确定传递给a()的字符串始终是一个JSON可解析字符串,该怎么办 例:a(“你好世界”) 这将导致 Unexpected token h in JSON at positi

这是我面临的常见错误之一。我想知道是否有办法解决这个问题

let a = (str) => {
    try {
        return JSON.parse(str);
    } catch (e) {
        return e;
    }
}
a()
将字符串解析为JSON并返回。如果我们永远不能确定传递给
a()
的字符串始终是一个JSON可解析字符串,该怎么办

例:
a(“你好世界”)

这将导致

Unexpected token h in JSON at position 0

有没有一种聪明的方法可以将字符串解析为JSON?(我的意思是,如果字符串不是PARSBLE,是否有方法返回字符串。)

如果字符串不是
JSON
,并且您希望返回该字符串,只需
返回它即可

let a = (str) => {
    try {
        return JSON.parse(str);
    } catch (e) {
        // Instead of error, return str
        return str;
    }
}
JSON.parse
将抛出非
JSON
字符串。大多数
JSON
验证程序执行以下操作:

function isJSON(str) {
    try {
        JSON.parse(str);
        return true;
    } catch (e) {
        return false;
    }
}
因此,您的代码是完全有效的,如果希望使用非
JSON
字符串,则只需在出错时返回字符串


无论如何,如果您的函数需要一个JSON,并且您收到一个非JSON字符串,那么您可能不应该返回相同的字符串。我会返回一个错误值,或者让错误冒出来。

如果字符串不是
JSON
,并且您希望返回该字符串,只需
返回它即可

let a = (str) => {
    try {
        return JSON.parse(str);
    } catch (e) {
        // Instead of error, return str
        return str;
    }
}
JSON.parse
将抛出非
JSON
字符串。大多数
JSON
验证程序执行以下操作:

function isJSON(str) {
    try {
        JSON.parse(str);
        return true;
    } catch (e) {
        return false;
    }
}
因此,您的代码是完全有效的,如果希望使用非
JSON
字符串,则只需在出错时返回字符串


无论如何,如果您的函数需要一个JSON,并且您收到一个非JSON字符串,那么您可能不应该返回相同的字符串。我会返回一个错误的值,或者让错误冒出来。

正如Marcos所说,如果只想返回字符串,那么在catch中返回输入参数

但是,如果要确保返回的数据类型始终一致,即始终返回
Map/JSON
,而不是有时返回
字符串

可以使用以下方法将字符串转换为键值映射对象:

let a = (str) => {
    try {
        return JSON.parse(str);
    } catch (e) {
        // Instead of error, return str as json object
        return {"value": str};
    }
}

然后,您可以访问字符串作为
a.value

,正如Marcos所说,如果您只想返回字符串,那么在catch中返回输入参数

但是,如果要确保返回的数据类型始终一致,即始终返回
Map/JSON
,而不是有时返回
字符串

可以使用以下方法将字符串转换为键值映射对象:

let a = (str) => {
    try {
        return JSON.parse(str);
    } catch (e) {
        // Instead of error, return str as json object
        return {"value": str};
    }
}

然后您可以访问字符串作为
a.value

,这是个坏主意。如果不应该是JSON的东西恰好看起来像JSON,那么您的代码将被可怕地破坏(可能以涉及安全漏洞的方式)。你应该修正你的意见。是的,我同意。在某些情况下,如我请求API并打印主体,如果主体预期为JSON,但由于错误,则不是。例如,它返回了“not a valid token”,我希望它是JSON。我认为在这种情况下,最好像Marcos所说的那样使用
isJSON()。如果不应该是JSON的东西恰好看起来像JSON,那么您的代码将被可怕地破坏(可能以涉及安全漏洞的方式)。你应该修正你的意见。是的,我同意。在某些情况下,如我请求API并打印主体,如果主体预期为JSON,但由于错误,则不是。例如,它返回了“not a valid token”,我希望它是JSON。我认为在这种情况下,最好像Marcos所说的那样使用
isJSON()
函数。让函数返回不同的类型是一种好的做法吗?比如,有时它返回一个
json对象
,有时返回一个
字符串
?我通常会在出现错误时返回一个类型或
null
/
false
,但我不认为这是不好的做法,因为它的文档记录正确。Taki,实际上这取决于具体情况。如果函数仅用于打印数据,我们仍然希望打印数据。让函数返回不同类型是否是一种好的做法?比如,有时它返回一个
json对象
,有时返回一个
字符串
?我通常会在出现错误时返回一个类型或
null
/
false
,但我不认为这是不好的做法,因为它的文档记录正确。Taki,实际上这取决于具体情况。如果该函数仅用于打印数据,我们仍然希望打印数据。