TransWikia.com

método JSON.stringify()

Stack Overflow em Português Asked by Ítalo Cristo on February 16, 2021

Tenho uma dúvida sobre o método JSON.stringify().

Realizando a consulta desses valores em uma tebela de membro:

{
    "NProjetos": [
        {
            "idProjeto": 2,
            "nomeProjetos": "SGI"
        }
    ],
    "cargo": "Desenvolvedor",
    "descricao": "Desenvolvedor PHP, JAVA",
    "id": 2,
    "imgMembros": [
        {
            "idImg": 2,
            "url": "img/diego.png"
        }
    ],
    "nome": "Diego Rabelo",
    "stats": 3
};

Com

JSON.stringify(membro.NProjetos, ['nomeProjetos']); //retorno:  [{"nomeProjetos":"SGI"}]

JSON.stringify(membro.nomeProjetos); //não tem retorno. 

Como eu poderia pegar só o valor, no caso “SGI”?

5 Answers

Entendi sua pergunta e tenho a solução correta.

No entanto, não sei se quer fazer isso por falta de opção ou conhecimento.

Por isso, trago duas soluções:

  • Aquela que responde sua pergunta;
  • Aquela que simplifica sua vida.

respondendo sua pergunta

Segundo a MDN web docs:

O método JSON.stringify() converte um objeto ou valor JavaScript, em uma string JSON. Opcionalmente substitui valores, se uma função de substituição é passada ou, opcionalmente, converte somente propriedades especificadas em uma array de substituição.

A array de substituição nada mais é que uma lista, onde você coloca o nome de cada propriedade que deseja incluir na conversão.

let selecionado
let humano;

humano = {
  nome: "José",
  idade: 33,
  altura: "1.8m"
}

// output: {"nome":"José","idade":33}
selecionado = JSON.stringify(humano, ["nome", "idade"]);
console.log(selecionado);

// output: {"nome":"José"}
selecionado = JSON.stringify(humano, ["nome"]);
console.log(selecionado);

Já a função de substituição, é um callback que recebe dois argumentos: um com o nome do objeto e outro com o valor.

Essa função pode usar os argumentos para modificar ou filtrar o valor.

Quando a função retorna undefined, o valor é filtrado (removido da conversão).

Quando a função retorna algo diferente de undefined, este valor é utilizado na conversão.

let substituido
let humano;

humano = {
  nome: "José",
  idade: 44,
  altura: "1.8m"
}

function substituicao(name, value) {

  if (value.idade != 44) return undefined

  return `${value.idade}`
}

// output: "José"
substituido = JSON.stringify(humano, (name, value) => value.nome);
console.log(substituido);

// output: 66
substituido = JSON.stringify(humano, substituicao);
console.log(substituido);

Desse modo, a solução para sua pergunta seria essa:

let projetos,
membro;

function substituicao(name, projetos) {

  let nomes;

  nomes = projetos.map(projeto => projeto.nomeProjetos);
  nomes = nomes.join(", ");

  return nomes;
}

membro = {
  "NProjetos": [
  {
      "idProjeto": 2,
      "nomeProjetos": "SGI"
  }
  ],
  "cargo": "Desenvolvedor",
  "descricao": "Desenvolvedor PHP, JAVA",
  "id": 2,
  "imgMembros": [
  {
      "idImg": 2,
      "url": "img/diego.png"
  }
  ],
  "nome": "Diego Rabelo",
  "stats": 3
};

projetos = JSON.stringify(membro.NProjetos, substituicao);
console.log(projetos);

simplificando a vida

Se você não precisa converter o objeto em string, antes de filtrar os nomes de projetos, poderias mapeá-los deste modo:

let nomes;

membro = {
  "NProjetos": [
  {
      "idProjeto": 2,
      "nomeProjetos": "SGI"
  }
  ],
  "cargo": "Desenvolvedor",
  "descricao": "Desenvolvedor PHP, JAVA",
  "id": 2,
  "imgMembros": [
  {
      "idImg": 2,
      "url": "img/diego.png"
  }
  ],
  "nome": "Diego Rabelo",
  "stats": 3
};

projetos = membro.NProjetos.map(projeto => projeto.nomeProjetos);
nomes = projetos.join(", ");

console.log(nomes);

Answered by unsocialcattle on February 16, 2021

dado o objeto

membro = {
    "NProjetos": [
        {
            "idProjeto": 2,
            "nomeProjetos": "SGI"
        }
    ],
    "cargo": "Desenvolvedor",
    "descricao": "Desenvolvedor PHP, JAVA",
    "id": 2,
    "imgMembros": [
        {
            "idImg": 2,
            "url": "img/diego.png"
        }
    ],
    "nome": "Diego Rabelo",
    "stats": 3
};

JSON.stringify() serve para transformar o JSON em uma stringy mas pelo que entendi de sua duvida vc não quer fazer isso, vc apenas usou pois não sabia outro modo de pegar o conteúdo

Explicação do porque o codigo não funcionou como você queria JSON.stringify(membro.nomeProjetos); //não tem retorno. ao digitar membro.nomeProjetos você esta acessando a variavel membro ( que é o objeto json) e logo em seguida tentou usar o objeto nomeProjetos porem esse objeto não existe neste nivel vc deve entrar primeiro em Nprojetos depois acessar o array e depois acessar o elemento nomeProjetos

creio eu que vc queria fazer o seguinte .....

newJson = JSON.parse(JSON.stringify(membro.NProjetos[0])) //Cria um novo json como se fosse (em toscamente) um subConjunto de membro
newJson.nomeProjetos // acessa 

ou acessar direto

membro['NProjetos'][0]['nomeProjetos']
//ou
membro.NProjetos[0].nomeProjetos

Answered by le314u on February 16, 2021

Se queres obter um JSON ou um array com todos os valores de "nomeProjetos " dentro de "NProjetos" basta mapeares essa array assim:

var nProjetos = membro.NProjetos.map(el => el.nomeProjetos);

ou em JavaScript menos moderno:

var nProjetos = membro.NProjetos.map(function(el){
    return el.nomeProjetos
});

e depois para criar um JSON:

var json = JSON.stringify(nProjetos);

Exemplo: https://jsfiddle.net/jw3mgwms/

Answered by Sergio on February 16, 2021

Você pode mapear os nomes dos projetos em um novo array usango o Array#map:

var projetosMembros = membros.NProjetos.map(proj => {
  return proj.nomeProjetos;
});

var membros = {"NProjetos": [{"idProjeto": 2,"nomeProjetos": "SGI"}],"cargo": "Desenvolvedor","descricao": "Desenvolvedor PHP, JAVA","id": 2,"imgMembros": [{"idImg": 2,"url": "img/diego.png"}],"nome": "Diego Rabelo","stats": 3};

var projetosMembros = membros.NProjetos.map(proj => {
  return proj.nomeProjetos;
});

console.log(projetosMembros);

Com laço clássico de repetição (ECMA5):

for (var i = 0 ; i < membros.NProjetos.length ; i++){
    projetosMembros.push(membros.NProjetos[i].nomeProjetos);
}

var membros = {"NProjetos": [{"idProjeto": 2,"nomeProjetos": "SGI"}],"cargo": "Desenvolvedor","descricao": "Desenvolvedor PHP, JAVA","id": 2,"imgMembros": [{"idImg": 2,"url": "img/diego.png"}],"nome": "Diego Rabelo","stats": 3};

var projetosMembros = [];
for (var i = 0 ; i < membros.NProjetos.length ; i++){
    projetosMembros.push(membros.NProjetos[i].nomeProjetos);
}

console.log(projetosMembros);

Answered by BrTkCa on February 16, 2021

Sendo membro o seu Json descrito na pergunta, você deve pegar primeiramente os valores. O problema não é especificamente no método JSON.stringify()

var projetos = []

for(var i = 0 ; i < membro.NProjetos.length ; i++){
    projetos.push(membro.NProjetos[i].nomeProjetos)
}

Ou, se estiver usando JQuery

var projetos = []

$.each(membro.NProjetos, function(){
    projetos.push($(this).nomeProjetos);
});

Se preferir pode usar map também do JQuery

var projetos = []

$.map(membro.NProjetos, function(projeto, i){
   projetos.push(projeto.nomeProjetos);
});

Com isso, você terá um array projetos, onde terá o nome de todos os projetos do seu Json.

Answered by hugofsousa on February 16, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP