我试图在get请求中将字符串数组作为参数发送。
console.log(arrayOfStrings); //Prints ["28"]
var ids = JSON.stringify(arrayOfStrings);
console.log(ids); //Prints ["\u00002\u00008"]
$http.get('do_staff_search', { params:{'ids': ids } }).then(successHandler);
然而,当我对数字数组进行字符串化时,我得到["\u00002\u00008"]
,然后在服务器java.lang.NumberFormatException: For input string: "▯2▯8"
上导致错误,每个数字前面有两个矩形块。
如果我使用Google Chrome控制台,请创建相同的数组并对其进行字符串化,输出为"["28"]"
这似乎是一个微不足道的问题,但我无法在Stack Overflow上找到一个类似的好问题。
更新
我做了一些测试,结果证明@MinusFour是正确的。它是一个字符串数组,而不是我假设的整数数组(数组是来自另一个请求的有效负载)。
更新2
我尝试使用此函数将字符串数组转换为整数数组:
function arrayOfNums(arr){
var newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr[i] = parseInt(arr[i]);
};
return newArr;
}
但解析Int为每个元素返回NaN。现在我想知道我的字符串是否存在一些编码问题,因为我从之前提出的服务器请求中得到了它们。我发现this related question但我不确定如何逃避任何无效字符。
就像一些背景知识一样,数组在SQL DB上存储为CLOB。我在服务器端使用Spring和Jackson发回一个JSON对象,在这个对象中我有相关的数组。虽然我可以访问服务器上的代码,但我无法真正改变它,因为还有其他应用程序向它发出请求。
答案 0 :(得分:0)
似乎字符串带有一些无效字符,这些字符来自AJAX请求,如here所述
所以在通过JSON.stringify
运行数组之前,我正在清理每个字符串:
function arrayOfNums(arr){
var numberPattern = /\d+/g;
var newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr[i] = parseInt(arr[i].match( numberPattern ).join(""));
};
return newArr;
}
因为每个数字前面都有无效字符,所以我在匹配模式后使用join将所有数字连接在一起。
更多的工作而不是永久的解决方案,我只希望这可以帮助处于类似情况的人。
答案 1 :(得分:0)
嗯,我觉得你的问题有点令人困惑!
可能是因为您在JSON.stringify()
数组上应用了string
..这就是我在您的代码中看到的内容..(请检查!)
进行更改:尝试将其更改为integer
数组
例如:
arrayOfStrings = [28];
然后检查!
以下是我测试的另一个例子:
var test_arr = [1, 2, 3, 5]; // array of integers
console.log(test_arr); // will print: [1, 2, 3, 5] -- an integer array
var test_ids = JSON.stringify(test_arr);
console.log(test_ids); // // will print: "[1,2,3,5]" -- an string
var test_parse = JSON.parse(test_ids);
console.log(test_parse ); // will print: [1, 2, 3, 5] -- an integer array
只是JSON.parse()
与JSON.stringify()
链接的指南:https://msdn.microsoft.com/en-us/library/cc836459(v=vs.94).aspx
......