我一直在寻找解决方案,但我只找到了从["1","2","3"]
到[1,2,3]
的转换,但我的问题是如何将其转换为"[1,2,3]"
到[1,2,3]
。
对你们中的许多人来说可能都很清楚,但对我来说并非如此。
答案 0 :(得分:7)
有几种方法:
eval("[1,2,3]")
JSON.parse("[1,2,3]")
$.parseJSON("[1,2,3]")
Function("return [1,2,3];")()
[]["filter"]["constructor"]("return [1,2,3]")()
(感谢JSF*ck)最安全的选择是使用jQuery包,来自jQuery或浏览器的原生包。
请记住eval
是邪恶的!它允许执行任意代码
对于Function
构造函数也是如此,但是对于那些构造函数,您可以向其添加'return'
如果您执行eval("[1,2,3]; evil();")
,evil()
功能将执行,而Function("return [1,2,3]; evil();")
将阻止执行evil()
。
这不是完美的解决方案,因为仍然可以执行Function("return evil() || [1,2,3];")
,并且evil()
将被执行。但是,在这种情况下,[1,2,3]
仅在evil()
返回假值(""
,null
,0
,false
时才会返回。 ..)。
答案 1 :(得分:3)
一种解决方案是使用JSON.parse()
cv::Mat ReadImageToCVMat(const string& filename,
const int height, const int width, const bool is_color) {
cv::Mat cv_img;
int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR :
CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat cv_img_origin = cv::imread(filename, cv_read_flag);
if (!cv_img_origin.data) {
LOG(ERROR) << "Could not open or find file " << filename;
return cv_img_origin;
}
if (height > 0 && width > 0) {
cv::resize(cv_img_origin, cv_img, cv::Size(width, height));
} else {
cv_img = cv_img_origin;
}
return cv_img;
}
如果来源是受信任的来源(eval()),您也可以使用Don't use eval needlessly!
JSON.parse("[1,2,3]")
答案 2 :(得分:3)
使用JSON.parse("[1,2,3]");
答案 3 :(得分:3)
您也可以自己解析:
var s = '[1,2,3]';
var a = s.slice(1, -1).split(',').map(Number);
// .slice(1, -1) -> "1,2,3"
// .split(',') -> ["1", "2", "3"]
// .map(Number) -> [1, 2, 3]
变异:
var a = (s.match(/-?\d+/g) || []).map(Number);
// .match(/-?\d+/g) -> ["1", "2", "3"]
// '[]'.match(/-?\d+/g) -> null
// (null || []) -> []
答案 4 :(得分:0)
您可以eval
使用以下警告 Don't use eval
needlessly!
var myArray = eval("[1,2,3]");
答案 5 :(得分:0)
Well, "[1,2,3]" is a String object.
You need to deserialize it using JSON.parse().
e.g:
var arr = "[1,2,3]"
JSON.parse(arr)
output will be >> [1,2,3]
Note: browser console don't detect JSON.parse() or JSON.stringify()
You have to do it in your code editor.