JSON.stringify上的字符串数组输出unicode字符

时间:2015-09-23 14:23:58

标签: javascript java json unicode stringify

我试图在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对象,在这个对象中我有相关的数组。虽然我可以访问服务器上的代码,但我无法真正改变它,因为还有其他应用程序向它发出请求。

2 个答案:

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