2015-09-23 5 views
0

Я пытаюсь отправить строковый массив в качестве параметра в запросе на получение.Строковый массив на JSON.stringify выводит символы Unicode

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); 

Однако, когда я stringify массива чисел, я получаю ["\u00002\u00008"], который затем вызывает ошибку на сервере java.lang.NumberFormatException: For input string: "▯2▯8" с двумя прямоугольными блоками перед каждым номером.

Если я использую консоль Google Chrome, создайте один и тот же массив и stringify его, выход "["28"]"

Это кажется тривиальным вопрос, но я не мог найти хороший подобный вопрос на переполнение стека.

UPDATE

Я сделал несколько тестов, и это оказывается @MinusFour правильно. Это массив строк, а не массив целых чисел, как я предполагал (массив - это полезная нагрузка от другого запроса).

UPDATE 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, но я не уверен, как избежать каких-либо недопустимых символов.

Как и некоторый фон, массив хранится как CLOB в SQL DB. Я использую Spring и Jackson на стороне сервера, чтобы отправить объект JSON обратно, и внутри этого объекта у меня есть массив. Хотя у меня есть доступ к коду на сервере, я не могу его изменить, потому что есть другие приложения, которые обращаются к нему.

+0

вы создаете этот массив жестко закодированный как это '[28]'? (например, код, который вы поделили) – Hacketo

+2

Welll, я получаю '' [28] «на Firefox, в какой среде вы используете? – MinusFour

+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; 
} 

Поскольку перед каждой цифрой есть недопустимые символы, я использую объединение, чтобы объединить все цифры вместе после сопоставления шаблона.

Больше работы, чем постоянное решение, я просто надеюсь, что это поможет кому-то в подобной ситуации.

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

+0

В итоге я сделал именно это (см. Обновление 2). Но я получал NaN при попытке проанализировать строки в массиве, поэтому мне пришлось использовать RegEx для извлечения цифр из строк (см. Мой ответ) –