[RESOLVIDO]Formatar string em Json.. JavaScript

1 resposta
R

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

1 Resposta

D

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.

<%-- 
    Document   : index
    Created on : Oct 21, 2011, 7:37:09 PM
    Author     : David
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
        <script type="text/javascript">
            
            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>
</html>
Criado 21 de outubro de 2011
Ultima resposta 21 de out. de 2011
Respostas 1
Participantes 2