Javascript объект с массивами для поиска строки запроса в стиле param - PullRequest
0 голосов
/ 09 января 2019

В поисках чистого способа преобразования объекта JavaScript, содержащего массивы в качестве значений, в строку запроса, совместимую с параметрами поиска. Сериализация элемента из каждого массива перед переходом к следующему индексу.

Использование библиотек, таких как querystring или qs, прекрасно преобразует объект, но обрабатывает каждый массив независимо. Передача полученной строки на сервер (которую я не могу изменить) вызывает ошибку в обработке элементов, поскольку каждое предыдущее значение перезаписывается следующим. Использование любого вида записи массива в строке запроса не поддерживается. Единственный вариант, который я не пробовал, - это настраиваемая функция сортировки, но кажется, что это будет хуже, чем написание настраиваемой функции для анализа объекта. Любая ревизия объекта, которая приведет к ожидаемому результату, также приветствуется.

var qs = require("qs")
var jsobj = {
    origString:['abc','123'],
    newString:['abcd','1234'],
    action:'compare'
}
qs.stringify(jsobj,{encode:false})
qs.stringify(jsobj,{encode:false,indices:false})
qs.stringify(jsobj,{encode:false,indices:false,arrayFormat:'repeat'})

Результат возвращен

"origString=abc&origString=123&newString=abcd&newString=1234&action=compare"
Желаемый результат будет
"origString=abc&newString=abcd&origString=123&newString=1234&action=compare"

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Поясните это до непонимания приложения. Потратив немного больше времени на API, я осознал свою ошибку, и, как написано выше, порядок не имеет значения. Не знаю, почему мои первые несколько попыток потерпели неудачу, но на вопрос «ответил»

0 голосов
/ 09 января 2019

Я пытался изменить порядок вашего JSON:

> var jsobj = [{origString: 'abc', newString: 'abcd' }, {origString: '123', 
newString: '1234' }, {action:'compare'}]
> qs.stringify(jsobj,{encode:false})
'0[origString]=abc&0[newString]=abcd&1[origString]=123&1[newString]=1234&2[action]=compare'

Но я не знаю, является ли это хорошей альтернативой для вашей проблемы.

...