JSON.stringify 上的字符串数组输出 unicode 字符
String array on JSON.stringify outputs unicode characters
我正在尝试发送一个字符串数组作为获取请求的参数。
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;
}
但是 parse Int 为每个元素返回 NaN。现在我想知道我的字符串是否存在一些编码问题导致它变冷,因为我是从我之前发出的服务器请求中获取它们的。我找到了 this related question,但不确定如何转义任何无效字符。
正如某些背景一样,数组作为 CLOB 存储在 SQL 数据库中。我在服务器端使用 Spring 和 Jackson 发送回 JSON 对象,并且在这个对象中我有问题数组。虽然我可以访问服务器上的代码,但我无法真正更改它,因为还有其他应用程序向它发出请求。
根据 here
所述,AJAX 请求返回的字符串似乎带有一些无效字符
所以在 运行 数组到 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将所有数字连接在一起。
与其说是永久解决方案,不如说是变通,我只是希望这对处于类似情况的人有所帮助。
嗯,我觉得你的问题有点令人困惑!
这可能是因为你在 string
数组上应用 JSON.stringify()
..这就是我在你的代码中看到的..(请检查!)
进行更改:尝试将其更改为 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()
link 的指南:https://msdn.microsoft.com/en-us/library/cc836459(v=vs.94).aspx
......
我正在尝试发送一个字符串数组作为获取请求的参数。
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;
}
但是 parse Int 为每个元素返回 NaN。现在我想知道我的字符串是否存在一些编码问题导致它变冷,因为我是从我之前发出的服务器请求中获取它们的。我找到了 this related question,但不确定如何转义任何无效字符。
正如某些背景一样,数组作为 CLOB 存储在 SQL 数据库中。我在服务器端使用 Spring 和 Jackson 发送回 JSON 对象,并且在这个对象中我有问题数组。虽然我可以访问服务器上的代码,但我无法真正更改它,因为还有其他应用程序向它发出请求。
根据 here
所述,AJAX 请求返回的字符串似乎带有一些无效字符所以在 运行 数组到 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将所有数字连接在一起。
与其说是永久解决方案,不如说是变通,我只是希望这对处于类似情况的人有所帮助。
嗯,我觉得你的问题有点令人困惑!
这可能是因为你在 string
数组上应用 JSON.stringify()
..这就是我在你的代码中看到的..(请检查!)
进行更改:尝试将其更改为 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()
link 的指南:https://msdn.microsoft.com/en-us/library/cc836459(v=vs.94).aspx
......