Вопрос по javascript, query-string, json, jquery – Javascript преобразует строку запроса в JSON с использованием jQuery и обратно в строку запроса [закрыто]

10

Надеюсь, вы найдете следующую функцию полезной для преобразования строки запроса в объект json

var queryStringToJSON = function (url) {
    if (url === '')
        return '';
    var pairs = (url || location.search).slice(1).split('&');
    var result = {};
    for (var idx in pairs) {
        var pair = pairs[idx].split('=');
        if (!!pair[0])
            result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
    }
    return result;
}

Использование:

Чтобы получить текущую строку запроса Windows

var result = queryStringToJSON() // without any parameter

Чтобы получить JSON из пользовательской строки запроса:

var result = queryStringToJSON('?name=prem&age=30&HEIGHT=5.8')

выход: {name:"prem", age:"30", height:"5.8"} //All keys are converted into small letters

Чтобы преобразовать его обратно в URL, вы можете использоватьJQuery Param метод

$.param(result)

Чтобы манипулировать строкой запроса, вы можете просто использовать стандартную манипуляцию с объектами в JavaScript и снова использовать метод $ .param

result.age=35;
delete result['name']; 
Спасибо @premChandaraSingh Mohasin Ali
он просто опубликовал свою полезную функцию, чтобы помогать другим ... так что нет вопросов здесь ... patel.milanb
Так какой у тебя вопрос? Tomi Lammi
Тогда почему я нашел это в разделе «вопросы»? Tomi Lammi
Это не похоже на работу с массивами: например:? = Name = Tom & name = Jeff KyorCode

Ваш Ответ

2   ответа
1

В качестве альтернативы ... Вместо:

for (var idx in pairs) {
    var pair = pairs[idx].split('=');
    if (!!pair[0])
        result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
}

Пытаться:

result = pairs.reduce(function(a,b) {
     var pair = b.split("=");
     a[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
     return a;
},{});

Работает так же, но используетreduce() которая является нативной функцией javascript, вероятно, быстрее.

Вам нужно полифилл для снижения, если вам нужно поддерживать IE8 или ниже. Вот:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... Dave
1

но если вы использовалиurl || location.search тогда вы должны удалитьif(url === '') return '' или это должно быть как,

var queryStringToJSON = function (url) {
    url = url || location.search;// url or location.search
    if (url === '')
        return '';// return if url and location.search not found
    // your remainig code
}
Понял но это специальная проверка. '' - это специальное ложное значение при манипулировании строками. Поэтому я просто хочу проверить, является ли ложное значение пустой строкой, просто вернуть как есть. Premchandra Singh
Тогда вы не должны использоватьlocation.search в линиюvar pairs = (url || location.search).slice(1).split('&'); Rohan Kumar

Похожие вопросы