Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como editar uma propriedade Json

Pessoal, eu tenho um json bem grandinho vou deixar um exemplo encurtado, mas a questão é ... eu pego esse json e converto diretamente pra um Array que o framework vai ler e montar um datatable ... Até ai beleza. O que eu preciso fazer mesmo é converter a propriedade "data" para que cada data fique com o formato mais usual nosso, ou seja, mudar de 20200101 (AAAAMMDD) para 01/01/2020 (DD/MM/2020) para cada Alguém pode me dar uma luz de como fazer isso ?

Segue o JSON de exemplo:

{
    "result": [
            {
                "_id": "5ebccab004357e1bb8ec23a6",
                "empresa_id": 112,
                "nome_fantasia": "Nome_Empresa",
                "CNPJ": "12312312321",
                "transacao": "Sucesso",
                "data": "20200513",
        "hora": "21:47:46"
        },
        {
        "_id": "5ebccab004357e1bb8ec23a7",
                "empresa_id": 113,
                "nome_fantasia": "Nome_Empresa2",
                "CNPJ": "1231239999", 
                "transacao": "Sucesso",
                "data": "20200514",
            "hora": "21:47:46",
        }
    ]
}
4 respostas

Olá Liniker,

Nesse caso, você vai precisar acessar cada propriedade e converta-la manualmente. Como você não tem um separador entre os números, existem 2 possibilidades:

let data = "20200514";
//Utilizando a função substr
let dataFormatada1 = `${data.substr(6, 2)}/${data.substr(4, 2)}/${data.substr(0, 4)}`
//"14/05/2020"

//Utilizando REGEX
let dataFormatada2 = data.replace(/(\d{4})(\d{2})(\d{2})/, "$3/$2/$1")
//"14/05/2020"

Abraço

Vinicius, desculpa, acho que não fui muito claro.

Mas o meu maior problema é como iterar em um JSON como esse alterando apenas a propriedade "data" .

No caso eu pegaria por exemplo algo do tipo:

result.data

ou fazendo um for pegando tipo :

result[i].data

Mas acredito que exista uma forma mais correta e elegante de fazer esse tipo de iteração usando map talvez, foreach, ou alguma function , que deixa o código mais clean...

Enfim, olhando no sentido de melhores práticas como eu devo fazer essa iteração?

Mas mesmo assim ajudou bastante a segunda parte pra resolver o problema hahaha :D

Obrigado.

solução!

Acho que entendi.

Você pode fazer o seguinte:

let json = `{
    "result": [
        {
            "_id": "5ebccab004357e1bb8ec23a6",
            "empresa_id": 112,
            "nome_fantasia": "Nome_Empresa",
            "CNPJ": "12312312321",
            "transacao": "Sucesso",
            "data": "20200513",
            "hora": "21:47:46"
        },
        {
            "_id": "5ebccab004357e1bb8ec23a7",
            "empresa_id": 113,
            "nome_fantasia": "Nome_Empresa2",
            "CNPJ": "1231239999",
            "transacao": "Sucesso",
            "data": "20200514",
            "hora": "21:47:46"
        }
    ]
}
`;

let obj = JSON.parse(json);

obj.result.forEach((item) => item.data = item.data.replace(/(\d{4})(\d{2})(\d{2})/, "$3/$2/$1"));

Com map até funcionaria, mas você teria mais trabalho, pois teria que formar todo o objeto novamente.

Com forEach, com uma instrução você já atualiza todos os elementos do próprio obj que está sendo iterado.

Espero ter ajudado. Abraços.

Obrigado Vinícius, ajudou muito!

Você é fera!