Picking up json data

0

I created a json with the data of a magazine that I maintain, but now I have to create a separate index by the proper category, by author, and the other fields, I was able to get the general data, but I can not filter this data into its corresponding field, I will show my code and explain it better.

var json = 
[
  {
        "ID":"7337",
        "TÍTULO":"ssss",
        "TIPO":"sssss",
        "NATUREZA DO TRABALHO":"",
        "CATEGORIA":"fdf",
        "SETOR EDUCACIONAL":"Educação Superior",
        "AUTORES":[
              {
                    "AUTOR":"wewew",
                    "INSTITUIÇÃO":"wewewe"
              },
              {
                    "AUTOR":"weew",
                    "INSTITUIÇÃO":"Ureerr"
              },
              {
                    "AUTOR":"sdsds",
                    "INSTITUIÇÃO":"Unicrerear"
              }
        ]
  },
  {
        "ID":"8265",
        "TÍTULO":"sddssd",
        "TIPO":"fdf",
        "NATUREZA DO TRABALHO":"Pesquisa",
        "CATEGORIA":"fdf",
        "SETOR EDUCACIONAL":"Educação Superior",
        "AUTORES":[
              {
                    "AUTOR":"teste",
                    "INSTITUIÇÃO":"Universidade de Ribeirão Preto"
              },
              {
                    "AUTOR":"teste",
                    "INSTITUIÇÃO":"Universidade de Ribeirão Preto"
              }
        ]
  },
  {
        "ID":"6216",
        "TÍTULO":"POLÍTICA",
        "TIPO":"testests",
        "NATUREZA DO TRABALHO":"textte",
        "CATEGORIA":"A - Estratégias e Políticas",
        "SETOR EDUCACIONAL":"Educação Superior",
        "AUTORES":[
              {
                    "AUTOR":"Araci Hpan",
                    "INSTITUIÇÃO":"UNIVERSIDADE "
              },
              {
                    "AUTOR":"Kelly",
                    "INSTITUIÇÃO":"Universidade "
              }
        ]
  },
  {
        "ID":"5869",
        "TÍTULO":"A EDUCAÇÃO BRASILEIRA E OS AVANÇOS NO PROCESSO DE REGULAMENTAÇÃO DO ENSINO A DISTÂNCIA",
        "TIPO":"Investigação Científica (IC)",
        "NATUREZA DO TRABALHO":"A - Planejamento ",
        "CATEGORIA":"A - Estratégias",
        "SETOR EDUCACIONAL":"Educação Superior",
        "AUTORES":[
              {
                    "AUTOR":"JAMARA C",
                    "INSTITUIÇÃO":"ISERJ"
              },
              {
                    "AUTOR":"sasa",
                    "INSTITUIÇÃO":"ewew"
              },
              {
                    "AUTOR":"s",
                    "INSTITUIÇÃO":"z"
              },
              {
                    "AUTOR":"z",
                    "INSTITUIÇÃO":"s"
              },
              {
                    "AUTOR":"Renata ",
                    "INSTITUIÇÃO":"Guia "
              },
              {
                    "AUTOR":"Almddjo",
                    "INSTITUIÇÃO":"FGF- Faculdade"
              }
        ]
  },
];

for(var i=0;i< json.length; i++){
 var html = "<tr>";
 html +="<td>"+json[i].ID+"</td>";
 html +="<td>"+json[i].TÍTULO+"</td>";
 html +="<td>"+json[i].TIPO+"</td>";
 html +="<td> <a href='trabalhos/"+json[i].ID+".pdf'>" +json[i].ID+"</td>";
 html +="</tr>";
 $('table tbody').append(html);

}

What I needed would be to filter this, for example all that have the same category, all that have the same sector and so on and show in html, but I'm not getting it, if anyone can give me a help with this question

    
asked by anonymous 23.10.2018 / 22:52

2 answers

1

Your JSON is an array, you can create your own helper, or use the filter method. The filter method receives an argument that is a callback function, this function will be called once for each item in your array, and you should return true if the item belongs to the filter, or false if it does not belong, ie:

var livrosFdf = json.filter(function(livro) {
    return livro.CATEGORIA === "fdf";
});

Or with arrow function:

var livrosFdf = json.filter(livro => livro.CATEGORIA === "fdf");

To search by author you would need to make a second query in the author array:

var livrosKelly = json.filter(livro => livro.AUTORES.some(autor => autor.AUTOR === "Kelly"));
    
23.10.2018 / 23:16
1

With this code, you can organize categories for example, but I'm not sure exactly if this is the path you should follow.

//source https://stackoverflow.com/questions/1960473/get-all-unique-values-in-a-javascript-array-remove-duplicates
function onlyUnique(value, index, self) { 
  return self.indexOf(value) === index;
}

var categorias = json.map(function(item){
  return item.CATEGORIA
}).filter( onlyUnique );

var jsonSeparadoPorCategorias = {};

categorias.forEach(function(item){
 jsonSeparadoPorCategorias[item] = json.filter(function(i){
  return i.CATEGORIA === item;
 });
});

console.log(jsonSeparadoPorCategorias);
    
23.10.2018 / 23:29