2013-11-11 4 views
15

У меня есть объект JSON, который выглядит какJavaScript Object (JSON) в URL Строка формата

{ 
    "version" : "22", 
    "who: : "234234234234" 
} 

И мне это нужно в строке, готовые к отправке в запрос сырой HTTP тела.

Поэтому мне нужно, чтобы она выглядела как

version=22&who=234324324324 

Но он должен работать, для бесконечного числа PARAMATERS, в данный момент я получил

app.jsonToRaw = function(object) { 
    var str = ""; 
    for (var index in object) str = str + index + "=" + object[index] + "&"; 
    return str.substring(0, str.length - 1); 
}; 

Однако должно быть лучший способ сделать это в native js?

Thanks

+2

Это * * является "родной JS". Единственное, что вы забываете, это вызвать «escapeURIComponent» для каждого имени параметра и его значения (отдельно). – Pointy

+0

О, и если какое-либо из ваших свойств может иметь значения массива или значения, являющиеся под-объектами, то ваш код должен будет каким-то образом справиться (и точно, как будет зависеть от того, что ожидает ваш сервер). – Pointy

+2

см. Http://stackoverflow.com/q/14525178/989121 и многие другие. – georg

ответ

37

Ваше решение довольно хорошее. Тот, который выглядит лучше, может быть:

var obj = { 
    "version" : "22", 
    "who" : "234234234234" 
}; 


var str = Object.keys(obj).map(function(key){ 
    return encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]); 
}).join('&'); 

console.log(str); //"version=22&who=234234234234" 

+1 @Pointy для encodeURIComponent

+0

Ах очень приятно, я дайте это спасибо. – Owen

+0

Отлично! Это очень помогает – Rentrop

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