【问题标题】:String array on JSON.stringify outputs unicode charactersJSON.stringify 上的字符串数组输出 unicode 字符
【发布时间】: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


【解决方案1】:

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将所有数字连接在一起。

更多的是解决方法而不是永久解决方案,我只是希望这对处于类似情况的人有所帮助。

【讨论】:

    【解决方案2】:

    嗯,我觉得你的问题有点混乱!

    这可能是因为您在 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() 的指南链接:https://msdn.microsoft.com/en-us/library/cc836459(v=vs.94).aspx ......

    【讨论】:

    • 我最终做到了这一点(参见更新 2)。但是我在尝试解析数组中的字符串时得到了 NaN,所以我不得不使用 RegEx 从字符串中提取数字(请参阅我的答案)
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 2023-02-14
    • 2017-02-09
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多