Pular para o conteúdo

Achatar dados JSON-LD — Numio

Achata um documento JSON-LD com jsonld.flatten: cada nó, inclusive os aninhados, vira uma entrada de nível superior em @graph, e os objetos aninhados são substituídos por referências {"@id"}. Nós sem nome recebem ids de blank node como _:b0.

Transformar JSON-LD muito aninhado em uma lista plana de nós fácil de indexar por @id ou de carregar em um store.

JSON-LD

Context

Flattened

Quando usar

  • Transformar JSON-LD muito aninhado em uma lista plana de nós fácil de indexar por @id ou de carregar em um store.
  • Descobrir quais objetos aninhados não têm @id, já que eles aparecem como blank nodes _:b.

Como usar

  1. Cole o documento no editor JSON-LD.
  2. Coloque no editor Context o contexto usado para compactar o resultado, por exemplo {"@context": {"@vocab": "http://schema.org/"}}.
  3. Confira o array @graph, que lista cada nó uma única vez, ordenado por @id.

JSON-LD + contexto

// JSON-LD editor
{
  "@context": {"@vocab": "http://schema.org/"},
  "@id": "http://example.org/order/7",
  "@type": "Order",
  "customer": {"name": "Jane Doe"},
  "orderedItem": [
    {"@id": "http://example.org/product/42", "name": "Lamp"}
  ]
}

// Context editor
{"@context": {"@vocab": "http://schema.org/"}}

JSON-LD achatado

{
  "@context": {
    "@vocab": "http://schema.org/"
  },
  "@graph": [
    {
      "@id": "_:b0",
      "name": "Jane Doe"
    },
    {
      "@id": "http://example.org/order/7",
      "@type": "Order",
      "customer": {
        "@id": "_:b0"
      },
      "orderedItem": {
        "@id": "http://example.org/product/42"
      }
    },
    {
      "@id": "http://example.org/product/42",
      "name": "Lamp"
    }
  ]
}

Detalhes e limitações

O editor Context é obrigatório e precisa conter JSON válido; o resultado é compactado com ele.

Os ids de blank node (_:b0, _:b1, …) são atribuídos durante o processamento e não são identificadores estáveis.

Roda no seu navegador com jsonld.js. Contextos remotos em qualquer um dos editores são baixados pelo seu navegador. Se o download falhar, a página mostra um erro com a URL do contexto.

FAQ

O que acontece com os objetos aninhados?

Cada objeto aninhado vira sua própria entrada em @graph e o pai mantém apenas uma referência, como "customer": {"@id": "_:b0"}.

Por que um array de um único item aparece como objeto?

Como o resultado é compactado, uma propriedade com um único valor (orderedItem acima) é escrita sem o array.

O mesmo nó é mesclado se aparecer duas vezes?

Sim. Nós com o mesmo @id são mesclados em uma única entrada com todas as suas propriedades.

Especificações e referências