How to mount JSON with a list of stores separated by categories?

2

I do not have much intimacy with JSON and I need to create a structure that contains a list of stores separated by categories, where each store item has some information (name, floor, phone, etc.). each category, but I would like everything to be in an object only to be able to iterate later.

I've tried something like below but it's not working very well:

var ljs = {
   "categ": "Loja de Departamentos",
   "lojas": [
      {
        nome: "LOJA A",
        piso: "1",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_a.jpg"
      },
      {
        nome: "LOJA B",
        piso: "1",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_b.jpg"
      }
      ]
};

In addition to "categ": "Loja de Departamentos" they will also have several other categories, such as Docerias, Restaurants etc. I believe the "lojas" key is even unnecessary.

How can I mount a JSON of this type, listing the categories and the list of stores for each, and then I can pull the data with a for ?

    
asked by anonymous 07.05.2018 / 20:24

3 answers

2

You can also use the category name as the key:

var ljs = {
  "Categ 1": {
    "lojas": [
      {
        nome: "LOJA A",
        piso: "1",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_a.jpg"
      },
      {
        nome: "LOJA B",
        piso: "1",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_b.jpg"
      }
    ]
  },
  "Categ 2": {
    "lojas": [
      {
        nome: "LOJA C",
        piso: "3",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_c.jpg"
      }
    ]
  }
};

for(cat in ljs) {
  let lj = ljs[cat]
  console.log("Nome da categoria:", cat)
  console.log("Lojas:", lj.lojas)
}

NOTE: I confess that I do not think it's legal to put punctuated words as a key.

    
07.05.2018 / 20:37
4

A simple way would look like this:

var ljs = [
  {
    "categ": "Categ1",
    "lojas": [
      {
        nome: "LOJA A",
        piso: "1",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_a.jpg"
      },
      {
        nome: "LOJA B",
        piso: "1",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_b.jpg"
      }
    ]
  },
  {
    "categ": "Categ2",
    "lojas": [
      {
        nome: "LOJA C",
        piso: "3",
        tel: "",
        desc: "descrição da loja.",
        imagem: "logo_c.jpg"
      }
    ]
  }
];

for(i in ljs) {
  let lj = ljs[i]
  
  console.log(lj.categ, lj.lojas)
}
    
07.05.2018 / 20:32
2

Simply wrap the category data in a root array. You can give a name to the field that will save the root (in the example I used dados ), or as was suggested in the other answer, transform ljs into an array itself.

So:

var ljs = {
    "dados": [
        {
           "categ": "Loja de Departamentos",
           "lojas": [
              {
                nome: "LOJA A",
                piso: "1",
                tel: "",
                desc: "descrição da loja.",
                imagem: "logo_a.jpg"
              },
              {
                nome: "LOJA B",
                piso: "1",
                tel: "",
                desc: "descrição da loja.",
                imagem: "logo_b.jpg"
              }
            ]
        },
        {
           "categ": "XYZ",
           "lojas": [
              {
                nome: "LOJA X",
                piso: "3",
                tel: "",
                desc: "descrição da loja.",
                imagem: "logo_x.jpg"
              },
              {
                nome: "LOJA Y",
                piso: "2",
                tel: "",
                desc: "descrição da loja.",
                imagem: "logo_y.jpg"
              }
            ]
        },
        ...
    ]
};
    
07.05.2018 / 20:32