【发布时间】:2015-12-20 22:17:17
【问题描述】:
我正在尝试发送一个字符串数组作为 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",每个数字前面都有两个矩形块。
如果我使用谷歌浏览器的控制台,创建相同的数组并对其进行字符串化,输出为"["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;
}
但是 parse Int 为每个元素返回 NaN。现在我想知道我的字符串是否存在一些编码问题,导致它很冷,因为我是从我之前提出的服务器请求中获取它们的。我找到了this related question,但我不确定如何转义任何无效字符。
正如一些背景知识,该数组作为 CLOB 存储在 SQL DB 上。我在服务器端使用 Spring 和 Jackson 来发送一个 JSON 对象,在这个对象中我有问题的数组。虽然我可以访问服务器上的代码,但我无法真正更改它,因为还有其他应用程序向它发出请求。
【问题讨论】:
-
你是在创建这个像
[28]这样硬编码的数组吗? (就像你分享的代码) -
好吧,我在 Firefox 上收到
"[28]",你使用的是哪个环境? -
看起来你写代码的编辑器有些东西。就像你有看不见的特殊字符一样。
-
好吧,看起来你有这个问题:stackoverflow.com/questions/3862430/…
-
@PedroHoehlCarvalho,好吧,因为这不是真正的代码,我们无法找到真正的问题。我最好的猜测是数组的元素不是数字,而是字符串。同样,没有人能说出来,因为我们没有真正的代码。
标签: javascript java json unicode stringify