Q:

Como filtrar objetos JSON pelos campos de um array?

Como posso pesquisar objetos JSON pelas tags atribuídas a ele? Tipo eu quero pegar todos os objetos que tenham a tag "algodao". Estou criando o modelo como está aí em baixo por enquanto, mas não sei se é a melhor forma, alguém me dá uma luz?
{
  "ofertas": [
    {
      "id": 1,
      "categoria": "masculino",
      "titulo": "Blusa Clássica",
      "descricao_oferta": "Camisa confeccionada em tecido leve de algodão com poliéster.", 
      "anunciante": "riachuelo",
      "valor": 59.90,
      "destaque": true,
      "data" : "1970-01-01 00:00:00",
      "tags": [ 
        {"tag": "algodao"}, 
        {"tag": "blusa"}, 
        {"tag": "azul"}, 
        {"tag": "classica"} 
      ],
      "imagens": [
        {
          "url": "/assets/ofertas/camisa-social/camisa-classica-01.jpg"
        },
        {
          "url": "/assets/ofertas/camisa-social/camisa-classica-02.jpg"
        },
        {
          "url": "/assets/ofertas/camisa-social/camisa-classica-03.jpg"
        },
        {
          "url": "/assets/ofertas/camisa-social/camisa-classica-04.jpg"
        }
     ]
  },  
    ...
}

pode ser pelo navegador localmente, eu só quero saber o caminho que tenho que seguir pra conseguir esse objeto. E se a forma que estruturei é a mais prática. Eu estava tentando isso: http://localhost:3000/ofertas?tags?tag=algodao mas não obtive sucesso.

A:

Você pode utilizar alguma ferramenta que ofereça leitura por meio de expressões JSONPath, como este site por exemplo.
Com seu JSON, você pode aplicar expressões como $.ofertas..imagens, que irá selecionar todas os nodes de imagens abaixo de ofertas:
[
  [
    {
      "url": "/assets/ofertas/camisa-social/camisa-classica-01.jpg"
    },
    {
      "url": "/assets/ofertas/camisa-social/camisa-classica-02.jpg"
    },
    {
      "url": "/assets/ofertas/camisa-social/camisa-classica-03.jpg"
    },
    {
      "url": "/assets/ofertas/camisa-social/camisa-classica-04.jpg"
    }
  ]
]

É possível também filtrar por índice do array, utilizando $.ofertas..imagens[0]:
[
  {
    "url": "/assets/ofertas/camisa-social/camisa-classica-01.jpg"
  }
]

É possível fazer vários filtros sobre propriedades também, mas recomendo você estudar por conta própria no link que deixei no começo da resposta :)

