JSON.stringify() method

Asked

Viewed 597 times

1

I have a question about the method JSON.stringify().

Performing the consultation of these values in a limb tebela:

{
    "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
};

With

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

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

How could I take only the amount, in the case "SGI"?

  • And that double quote missing in "NProjetos"? Was it a mistake to write the question or is it wrong in the code?

  • It is not a valid JSON, you can first test it here: http://jsonlint.com/

  • In fact, what is membro in JSON.stringify(membro.nomeProjetos)? Apparently your doubt is simple, but you can’t understand what you want.

  • Same typing error, Jbueno.

  • I believe that if your interest is to take only the value, you can simply use: var nomeProj = membro.NProjetos[0].nomeProjetos, than making stringify.

  • From what I understand this is also @Lucascosta, but my question is, N right designs? you want the nomeProjetos of all?

  • Based on JSON https://jsfiddle.net/lbclucascosta/5n8wdtmg/

  • Thank you, Lucas. That’s right Kenny.

Show 3 more comments

5 answers

1

If you want to get a JSON or an array with all values of "nomeProjetos " inside "NProjetos" just map this array like this:

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

or in less modern Javascript:

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

and then to create a JSON:

var json = JSON.stringify(nProjetos);

Example: https://jsfiddle.net/jw3mgwms/

0

You can map the project names in a new array using the 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);

With classic repeat loop (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);

0

given the object

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() serves to transform JSON into a stringy but from what I understand of your doubt you don’t want to do it, you just used it because you didn’t know any other way to get the content

Explanation of why the code did not work as you wanted JSON.stringify(membro.nomeProjetos); //não tem retorno. by typing member.nameProjects you are accessing the member variable ( which is the json object) and soon after tried to use the object nameProjects however this object does not exist at this level you must first enter Nprojects then access the array and then access the element nameProjects

I believe you wanted to do the following .....

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

or directly access

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

0

I understand your question and I have the solution correct.

However, I don’t know if you want to do this for lack of choice or knowledge.

So I bring two solutions:

  • The one who answers your question;
  • The one who simplifies your life.

answering your question

According to the MDN web Docs:

The method JSON.stringify() converts a Javascript object or value into a JSON string. Optionally replaces values if a replacement function is passed or optionally converts only specified properties into a replacement array.

The replacement array is nothing more than a list, where you put the name of each property you want to include in the conversion.

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);

Already the replacement function, is a callback that takes two arguments: one with the object name and the other with the value.

This function can use the arguments to modify or filter the value.

When the function returns undefined, value is filtered (removed from conversion).

When the function returns something other than undefined, this value is used in the conversion.

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);

So the solution to your question would be this:

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);

simplifying life

If you don’t need to string the object, before filtering the project names, you could map them this way:

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);

0

Being membro your Json described in the question, you should first take the values. The problem is not specifically in the method JSON.stringify()

var projetos = []

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

Or, if you are using Jquery

var projetos = []

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

If you prefer you can use map jquery

var projetos = []

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

With this you will have an array projetos, where you will have the name of all your Json projects.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.