Rfuhr
Outubro 21, 2011, 3:41pm
#1
Boa Tarde. pessoal
preciso ler uma string no JavaScript e formatar ele na forma correta de json… a string. por exemplo é assim:
[{"atributoEstadoPk.atributo.codigo":1,"atributoEstadoPk.estado.codigo":"1"},{"atributoEstadoPk.atributo.codigo":2,"atributoEstadoPk.estado.codigo":"4"}]
Tenho que ser uma função que seje meio dinamica… pois posso ter n atributos. com n. elementos …
Isso: {"atributoEstadoPk.atributo.codigo":1,
Se Torne Isso:
{"atributoEstadoPk" : { "atributo" : {"codigo" : 1 } } }
Alguem sabe de alguma função ja implementada ou dar uma mão de como fazer isto.
Obrigado
Oi, fiz alguma coisa aqui para vc.
A função transformar recebe um objeto escrito em JSON no seu formato original e retorna um novo objeto da forma que você quer.
Tanto os objetos de entrada e de saída são arrays.
[code]<%–
Document : index
Created on : Oct 21, 2011, 7:37:09 PM
Author : David
–%>
<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
JSP Page
function load() {
var dados = [{"atributoEstadoPk.atributo.codigo":1,"atributoEstadoPk.estado.codigo":"1"},{"atributoEstadoPk.atributo.codigo":2,"atributoEstadoPk.estado.codigo":"4"}];
var objeto = transformar( dados );
alert( objeto[0].atributoEstadoPk.atributo.codigo );
alert( objeto[1].atributoEstadoPk.estado.codigo );
alert( objeto[2].atributoEstadoPk.atributo.codigo );
alert( objeto[3].atributoEstadoPk.estado.codigo );
}
function transformar( dados ) {
var transferencia = "[";
var processa = function( dados ) {
for ( var x in dados ) {
if ( dados[x] instanceof Object ) {
processa( dados[x] );
} else if ( typeof x == "string" ) {
var chaves = x.split(".");
var valor = dados[x];
var novoObjeto = "";
for ( var i = 0; i < chaves.length; i++ ) {
novoObjeto += '{"' + chaves[i] + '":'
}
if ( typeof valor == "string" ) {
novoObjeto += '"' + valor + '"';
} else {
novoObjeto += valor;
}
for ( ; i > 0; i-- ) {
novoObjeto += "}";
}
transferencia += novoObjeto + ",";
}
}
}
processa( dados );
// remove a última vírgula
transferencia = transferencia.substring( 0,
transferencia.length - 1 );
transferencia += "]";
return eval( transferencia );
}
</script>
</head>
<body onload="load()">
</body>
[/code]