JSON Stringify: usando esse método para converter um objeto em uma string!

As principais linguagens de programação dispõem de uma série de métodos para a realização de funções específicas nos sistemas que estamos desenvolvendo. Às vezes, precisamos converter determinados tipos de dados e estruturas para uma maior mobilidade e estabilidade de nossas aplicações. O método JSON.stringify() do JavaScript é uma das soluções utilizadas para isso.

Muitas pessoas iniciantes na programação se sentem um pouco intimidadas com novas funções — se acaso você for uma delas, não se preocupe. Neste guia, explicaremos passo a passo, de maneira simples e didática, como esses recursos funcionam. Tentamos conduzir seu aprendizado da melhor maneira, trazendo exemplos que incorporem a teoria mostrada no decorrer do conteúdo.

Ao final, certamente, você se sentirá uma pessoa mais preparada para lidar com esse método e com novas estruturas de dados para seus códigos. Vale a pena lembrar que esse é apenas mais um passo em uma longa caminhada na jornada de uma pessoa programadora experiente.

Para ajudar nisso, escolhemos os seguintes tópicos, considerados os principais quando falamos sobre o método JSON.stringify():

Então, mãos à obra e tenha o melhor proveito de nosso material!

O que é o método JSON Stringify e para que serve?

O JSON.stringify() é um dos vários métodos nativos da linguagem de programação JavaScript. Sua principal função é converter valores e objetos denotados na linguagem em uma String JSON — um conjunto de dados humanamente legível e representados apenas por conjuntos de caracteres.

Confira esse exemplo, em que pedimos para que o console imprima, usando o método, um array contendo os valores de três elementos, x, y e z:

console.log(JSON.stringify({ x: 1, y: 2, z:1 }));

A saída deverá ser:

'{"x":5,"y":6, “z”:1}'

Qual a sintaxe do JSON Stringify?

O método JSON.stringify() tem uma sintaxe bem simples:

JSON.stringify(valor ou objeto a ser convertido)

Aqui, você pode conferir um exemplo prático:

<!DOCTYPE html>
<html>
<body>
<h2>Exemplo prático de uso do método JSON.stringify(): </h2>
<p id="paragrafo"></p>
<script>
const objeto_1 = {nome: "Ana", data: new Date(), cidade: "São Joaquim"};
const meuJSON = JSON.stringify(objeto_1);
document.getElementById("paragrafo").innerHTML = meuJSON;
</script>
</body>
</html>

Saída:

Exemplo prático de uso do método JSON.stringify():

{“nome”:”Ana”,”data”:”2022-01-28T04:41:19.840Z”,”cidade”:”São Joaquim”}

Esse método de análise de dados também tem alguns parâmetros adicionais, os quais podem complementar suas funções durante o desenvolvimento de aplicações:

JSON.stringify(valor, replacer, space)

Conheceremos melhor esses parâmetros na próxima parte deste guia, confira!

Quais os parâmetros do JSON Stringify?

Replacer e space são os outros dois parâmetros que podem ser utilizados além do valor (ou “value”, como muitas pessoas chamam). Vamos abordar detalhadamente o funcionamento e o uso de cada um desses parâmetros, usando exemplos simples e práticos para a didática ser favorecida. Continue a leitura!

Parâmetro value

O parâmetro value — ou valor — tem a função de identificar o que será convertido pelo método JSON.stringify(). Tudo que é declarado nessa primeira posição terá uma saída estruturada em JSON String.

Confira esses exemplos:

a)

JSON.stringify({});               
    
 //a saída deverá ser  '{}'

b)

//teste 1
let caracteres = “trybe”
JSON.stringify(caracteres);
//teste 2
JSON.stringify(‘trybe’);
 //a saída deverá ser 'trybe' para ambos os comandos

c)

JSON.stringify(true);                 
//a saída deverá ser 'true'

d)

let caracteres = 1
JSON.stringify(caracteres);
//a saída deverá ser “1”

Parâmetro replacer

O parâmetro replacer é opcional, ou seja, não tem obrigatoriedade de ser declarado ao utilizar o método JSON.stringfy(). Ele será declarado sempre depois dos objetos, sendo separados por uma vírgula, assim:

JSON.stringify(value, replacer)

Sua função está na alteração do comportamento convencional do método JSON.stringfy(), fazendo a substituição de algumas chaves ou valores — também pode ser usado com uma função. Por exemplo, logo abaixo, você pode ver esse parâmetro sendo escrito como uma função em Javascript:

function replacer(key, value) {
  if (typeof value === 'string') {
   return undefined;
  }
  return value;
}
var teste = {linguagem: 'JavaScript', escola: 'Trybe', duração: 12};
JSON.stringify(teste, replacer);

Essa função terá o seguinte retorno:

"{\"duração\":12}"

Você consegue entender o por quê? Repare que a função pede o retorno do valor que não seja do tipo String, depois de realizar a análise do JSON.

O replacer também pode ser usado para filtrar chaves:

var objeto = {nome: 'Corsa', ano: '2020', donos: 3, preço: 13000, km: 800000};
JSON.stringify(objeto, ['preço']);

Podemos, também, filtrar por mais de uma chave:

var objeto = {nome: 'Corsa', ano: '2020', donos: 3, preço: 13000, km: 800000};
JSON.stringify(objeto, ['nome','donos', 'km']);

Lembrando que você pode testar esses códigos no console de seu próprio navegador — é só clicar em F12 e ir até a aba “console”.

O parâmetro Space

Esse parâmetro é utilizado para controlar o espaçamento dado nos dados de saída. Veja o exemplo:

var objeto = {nome: 'Corsa', ano: '2020', donos: 3, preço: 13000, km: 800000};
var a = 10;
JSON.stringify(objeto, ['preço'], a);

Aqui, como podemos observar no código, o valor do space será 10. Teremos 10 espaços antes da impressão dos dados pedidos, no caso, o “preço”. A saída será a seguinte:

"{
           \"preço\": 13000
 }"

É diferente se alterarmos o valor da variável “a” para 1:

"{ 
 \"preço\": 13000
 }"

Caso o valor de “a” seja uma String, ela será impressa no lugar dos espaços. Para ambos os casos, o limite é de 10:

var objeto = {nome: 'Corsa', ano: '2020', donos: 3, preço: 13000, km: 800000};
var a = "Anticonstitucionalissimamente";
JSON.stringify(objeto, ['preço'], a);

A saída será:

"{ 
Anticonsti\"preço\": 13000
 }"

Quais as diferenças entre JSON Stringify e JSON Parse?

Se buscarmos uma maneira mais simples possível para explicar as diferenças e semelhanças entre os métodos JSON.stringify e JSON.parse(), talvez encontremos a seguinte resposta:

  • o método JSON.stringify() analisa um um objeto em JavaScript e o transforma em uma String JSON;
  • o método JSON.parse() analisa uma String JSON e, por sua vez, a transforma em um objeto em JavaScript.

Nada melhor do que um exemplo, para ver na prática como se dão essas diferenças:

const lago = {
  agua: true,
  peixe: "lambari",
  tamanho: "2 km",
  count: 1
};
console.log(JSON.stringify(lago));
console.log(JSON.parse(JSON.stringify(lago)));

Para a primeira análise, teremos a seguinte saída:

{"agua":true,"peixe":"lambari","tamanho":"2 km","count":1}

Já para a segunda, essa:

object { agua: true, peixe: "lambari", tamanho: "2km", count: 1 }
​
agua: true
​
count: 1
​
peixe: "lambari"
​
tamanho: "2km"

Portanto, como podemos ver, a diferença entre os dois métodos está no modelo de dados e de serialização utilizado para seus produtos, entre JSON e objetos JavaScript.

Quais os possíveis problemas de uso do JSON Stringify? Veja 3 exemplos

Ao longo do guia, tivemos várias aplicações do conteúdo que trouxemos, buscando esmiuçar cada detalhe do método JSON.stringify(). Como a prática é amiga da perfeição, escolhemos trazer mais 3 exemplos de aplicação dos principais pontos abordados até agora.

Tente replicá-los em sua máquina, seja na IDE, seja no Node ou mesmo em seu navegador. Procure modificar esses programas até entender, com detalhes, cada parte de sua estrutura. Prepare-se e vamos lá!

Exemplo 1 — A função replacer em prática

Neste exemplo, usaremos o método JSON.stringify() juntamente à função replacer nos casos em que temos o e-mail de um usuário em nosso arquivo JSON. Isso é bastante apropriado para não retornar em seu aplicativo informações que você não deseja:

const user = {
  id: 1,
  name: "Amir Amar",
  email: "[email protected]"
};
function replacer(key, value) {
  if (typeof value === "number") {
   return undefined;
  }
  if (key === "email") {
   return "Removido por segurança";
  }
  return value;
}
console.log(JSON.stringify(user, replacer));

O retorno no console desse código apresentado será:

{"name":"Amir Amar","email":"Removido por segurança"}

Esse é um bom exemplo para explicarmos um pouco sobre a segurança de um JSON. Repare que a informação está disponibilizada, mas não será mostrada em caso de ser acessada em nossa aplicação.

Mas nós, que estudamos e sabemos um pouco mais de JavaScript do que a maioria da população, sabemos que basta acessar o JSON diretamente para termos acesso a essa informação, pois ela ainda está lá, disponível.

Exemplo 2 — mais detalhes sobre o JSON .parse e .strigify()

Nesse exemplo, precisamos notar que apenas alguns dos dados primitivos usados em JavaScript serão processados recursivamente pelo JSON.parse() depois de usar o JSON.strigify():

const meuObj = {
  string: 'um caractere ou um conjunto deles',
  inteiros: 42,
  booleanos: false,
  dataObjeto: new Date('2022-01-31T23:59:59'), // formato de data é transformado em conjunto de caracteres;
  undefinedValue: undefined, // tanto a chave quanto o valor serão perdidos ao serem analisados e encontrados como “undefined”;
  valornull: null,
  infinito: Infinity, // Números infinitos serão perdidos e considerados “null”;
  notANumber: NaN, // Valores NaN serão perdidos e considerados “null”;
  regExpObject: /.*/, // Quaisquer dados RegExp serão perdidos e considerados como objetos vazios ({});
}
console.log(meuObj) /
const minhaDeepCopy = JSON.parse(JSON.stringify(meuObj))
console.log(minhaDeepCopy) // Object { string: "um caracter ou conjunto deles", inteiros: 42, booleanos: false, dataObjeto: Date Mon Jan 31 2022 23:59:59 GMT-0300 (Horário Padrão de Brasília), undefinedValue: undefined, valornull: null, infinito: Infinity, notANumber: NaN, regExpObject: /.*/ }
console.log(typeof minhaDeepCopy.dateObject) // Aqui a saída deverá responder “string” para o tipo de dado date, já que foi “strignificado” pelo método.

Exemplo 3 — armazenando dados localmente e usando o JSON.stringfy()

A seguir, você confere um exemplo bem simples de uma página que armazena os dados de maneira local com ajuda do método JSON.stringify():

<!DOCTYPE html>
<html>
<body>
<h2>Armazenando dados locais com JSON.stringify()</h2>
<p id="p"></p>
<script>
// Armazenando os dados que queremos:
const meuObjLista = { nome: "Trybe", site: "betrybe.com", país: "Brasil" };
const meuJSON = JSON.stringify(meuObjLista);
localStorage.setItem("teste", meuJSON);
// obtendo as informações:
let text = localStorage.getItem("teste");
let obj = JSON.parse(text);
document.getElementById("p").innerHTML = obj.nome;
</script>
</body>
</html>

Chegamos ao fim de mais um guia. Percorremos, ao longo de nosso texto, muitos dos detalhes que contribuirão para o entendimento dos próximos códigos que você tiver em mãos, tenha certeza disso. Agora que você já conhece os principais recursos do método JSON.stringify, comece a colocá-los em prática. Use os exemplos que abordamos e modifique-os, criando novos sistemas.

Se você quer se aprofundar ainda mais em programação e entrar de cabeça no mercado de desenvolvimento, mas ainda está com dúvidas sobre como proceder, entre em contato com a Trybe! Você também pode fazer a inscrição em nosso processo seletivo — acesse nosso curso introdutório gratuito de JavaScript e tire todas as suas dúvidas em nossa comunidade do Slack.