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”?
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:
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP