Skip to content

Instantly share code, notes, and snippets.

@AlbertoMonteiro
Created December 10, 2011 03:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlbertoMonteiro/1454493 to your computer and use it in GitHub Desktop.
Save AlbertoMonteiro/1454493 to your computer and use it in GitHub Desktop.
Json to formUrlencoded
function jsonToFormUrlencoded(obj, currentLevel) {
var serialized = "";
for (var item in obj) {
if (obj[item] instanceof Array) {
for (var i = 0; i < obj[item].length; i++) {
if (obj[item][i] instanceof Object) {
if (currentLevel)
serialized += jsonToFormUrlencoded(obj[item][i], "{0}.{1}[{2}]".format(currentLevel, item, i)) + "&";
else {
serialized += jsonToFormUrlencoded(obj[item][i], "{0}[{1}]".format(item, i)) + "&";
}
} else {
if (currentLevel)
serialized += "{0}.{1}[{2}]={3}&".format(currentLevel, item, i, obj[item][i]);
else
serialized += "{0}[{1}]={2}&".format(item, i, obj[item][i]);
}
}
}
else if (obj[item] instanceof Object) {
if (currentLevel)
serialized += jsonToFormUrlencoded(obj[item], "{0}.{1}".format(currentLevel, item)) + "&";
else
serialized += jsonToFormUrlencoded(obj[item], item) + "&";
}
else {
if (currentLevel)
serialized += "{0}.{1}={2}&".format(currentLevel, item, obj[item]);
else
serialized += "{0}={1}&".format(item, obj[item]);
}
}
return serialized.substr(0, serialized.length - 1).replace(/\s/g, "+");
}
String.prototype.format = function () {
var format = this;
for (var i = 0; i < arguments.length; i++) {
format = format.replace('{' + (i) + '}', arguments[i]);
}
return format;
};
module('test');
test('Posso transformar um json com uma propriedade simples em um form serializado', function () {
var model = { Nome: "Alberto" };
equal(jsonToFormUrlencoded(model), 'Nome=Alberto');
});
test('Posso transformar um json com mais de uma propriedade simples em um form serializado', function () {
var model = { Nome: "Alberto", Idade: 21 };
equal(jsonToFormUrlencoded(model), 'Nome=Alberto&Idade=21');
});
test('Posso transformar um json aninhando so com propriedades simples em um form serializado', function () {
var model = {
Nome: "Alberto",
Idade: 21,
Endereco: {
Logradouro: "Rua Paulino Nogueira",
Ap: {
Numero: 283
}
}
};
equal(jsonToFormUrlencoded(model), 'Nome=Alberto&Idade=21&Endereco.Logradouro=Rua+Paulino+Nogueira&Endereco.Ap.Numero=283');
});
test('Posso transformar um json que contenha propriedades do tipo array de objeto simples em um form serializado', function () {
var model = {
Nome: "Alberto",
Idade: 21,
Valores: [1, 2, 3]
};
equal(jsonToFormUrlencoded(model), 'Nome=Alberto&Idade=21&Valores[0]=1&Valores[1]=2&Valores[2]=3');
});
test('Posso transformar um json que contenha propriedades do tipo array de objeto complexo em um form serializado', function () {
var model = {
Nome: "Alberto",
Idade: 21,
Valores: [{ Valor: 1 }, { Valor: 2}]
};
equal(jsonToFormUrlencoded(model), 'Nome=Alberto&Idade=21&Valores[0].Valor=1&Valores[1].Valor=2');
});
test('Posso transformar um json em um form serializado', function () {
var model = {
Codigo: "1",
Nome: "Fortes Informatica",
Estabelecimentos: [{ Codigo: "1", Nome: "Matriz" }, { Codigo: "2", Nome: "Benfica"}]
};
equal(jsonToFormUrlencoded(model), 'Codigo=1&Nome=Fortes+Informatica&Estabelecimentos[0].Codigo=1&Estabelecimentos[0].Nome=Matriz&Estabelecimentos[1].Codigo=2&Estabelecimentos[1].Nome=Benfica');
});
test('Posso transformar um json em um form serializado fodasticamente', function () {
var model = {
Codigo: "1",
Nome: "Fortes Informatica",
Estabelecimentos: [{
Codigo: "1",
Nome: "Matriz",
V: [{ VV: 1 }]
}, {
Codigo: "2",
Nome: "Benfica",
V: [{ VV: 2 }]
}]
};
equal(jsonToFormUrlencoded(model),
'Codigo=1&Nome=Fortes+Informatica&Estabelecimentos[0].Codigo=1&Estabelecimentos[0].Nome=Matriz&Estabelecimentos[0].V[0].VV=1&Estabelecimentos[1].Codigo=2&Estabelecimentos[1].Nome=Benfica&Estabelecimentos[1].V[0].VV=2');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment