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 ......