2016-03-04 2 views
0

Как я могу преобразовать строку запроса, как var1=5&var2=stackoverflow&var3=blah на объект JSON какОт QueryString к JSON в JavaScript

{ 
    "var1": "5", 
    "var2": "stackoverflow", 
    "var3": "blah" 
} 

Я следующий this, но похоже, я пропускаю что-то ... Я могу также используйте jQuery, если необходимо.

+0

Как именно код обучения не работает для вас? – IceFire

+0

Похоже, что он возвращает массив с объектом внутри, но мне нужен только объект – Napolux

+0

Вы когда-нибудь решали это? Было ли мое предложение помочь вам вообще? – scniro

ответ

3

Я решил, выполнив руководство синтаксический анализ самого объекта ...

AjaxForm.prototype.getData = function() { 
    var data = this.$element.serializeArray(); 
    var object = {}; 

    for (var i = 0; i < data.length; i++) { 
     object[data[i].name] = data[i].value; 
    } 

    return JSON.stringify(object); 
}; 
+0

Можете ли вы создать скрипку, которая показывает, что это работает? Я не понимаю, что вы здесь делаете - как вы разбираете строку запроса? – scniro

0

Вы можете следить за this:

$(function(){ 

    // Values are not coerced. 
    var params = $.deparam.querystring(); 

    debug.log('not coerced', params); 
    $('#deparam_string').text(JSON.stringify(params, null, 2)); 

    // Values are coerced. 
    params = $.deparam.querystring(true); 

    debug.log('coerced', params); 
    $('#deparam_coerced').text(JSON.stringify(params, null, 2)); 

    // Highlight the current sample query string link 
    var qs = $.param.querystring(); 

    $('li a').each(function(){ 
    if ($(this).attr('href') === '?' + qs) { 
     $(this).addClass('current'); 
    } 
    }); 

}); 
2

Не уверен, в какой момент вы боретесь с в упомянутом учебнике, так как вы не предоставили свой фрагмент, но проверка этой статьи, я был в состоянии полностью обработать рабочий пример для вас (с некоторыми предложениями по улучшению в комментариях). Обратите внимание на следующее ...

function QueryStringToJSON(str) { 
    var pairs = str.split('&'); 
    var result = {}; 
    pairs.forEach(function (pair) { 
     pair = pair.split('='); 
     var name = pair[0] 
     var value = pair[1] 
     if (name.length) 
      if (result[name] !== undefined) { 
       if (!result[name].push) { 
        result[name] = [result[name]]; 
       } 
       result[name].push(value || ''); 
      } else { 
       result[name] = value || ''; 
      } 
    }); 
    return (result); 
} 

var string = 'var1=5&var2=stackoverflow&var3=blah'; 
var obj = QueryStringToJSON(string); 

console.log(obj) // {var1: "5", var2: "stackoverflow", var3: "blah"} 

JSFiddle Link - рабочая демо


Поиск вокруг в Интернете будет указывать вам jQuery BBQ: $.deparam как подход к этому в какой-то момент. Это замечательно и, вероятно, немного более надежным, но сначала вы должны уйти от вышеуказанного кода, особенно если вы хотите получить ванильное решение (которое вы всегда должны!)

+0

Вы можете изменить последнюю строку как 'return (JSON.stringify (result));' Это даст идеальную строку JSON. В настоящее время его возвращение объекта не будет напечатано в console.log(). – Amrit

0

Вы можете сделать это следующим образом.

var query="var1=5&var2=stackoverflow&var3=blah"; 
var arr=query.split("&"); 
result={}; 
for(i=0;i<arr.length;i++) { 
    k = arr[i].split('='); 
    result[k[0]] = (k[1] || ''); 
}; 
console.log(result); 

Так вот, что я делаю 1) раздельным запрос с использованием "&". вы получите массив как ["var1 = 5", ....];

2) Снова расщепление каждого элемента массива над «=».

3) взятие ключа как arr [0] и значение as arr [1], а если нет значения, то «.

Примечание: это для декодированного URI. Если URI кодируется, сначала декодируйте его с помощью функции decodeURIComponent().

Смежные вопросы