Saltar al contenido

Aplanar datos JSON-LD — Numio

Aplana un documento JSON-LD con jsonld.flatten: cada nodo, incluidos los anidados, pasa a ser una entrada de nivel superior en @graph, y los objetos anidados se sustituyen por referencias {"@id"}. Los nodos sin nombre reciben ids de blank node como _:b0.

Convertir JSON-LD muy anidado en una lista plana de nodos fácil de indexar por @id o de cargar en un almacén.

JSON-LD

Context

Flattened

Cuándo usarla

  • Convertir JSON-LD muy anidado en una lista plana de nodos fácil de indexar por @id o de cargar en un almacén.
  • Encontrar qué objetos anidados no tienen @id, ya que aparecen como blank nodes _:b.

Cómo usarla

  1. Pega el documento en el editor JSON-LD.
  2. Pon en el editor Context el contexto con el que compactar el resultado, por ejemplo {"@context": {"@vocab": "http://schema.org/"}}.
  3. Revisa el array @graph, que muestra cada nodo una sola 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 aplanado

{
  "@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"
    }
  ]
}

Detalles y limitaciones

El editor Context es obligatorio y debe contener JSON válido; el resultado se compacta con él.

Los ids de blank node (_:b0, _:b1, …) se asignan durante el procesamiento y no son identificadores estables.

Se ejecuta en tu navegador con jsonld.js. Los contextos remotos de cualquiera de los dos editores los descarga tu navegador. Si la descarga falla, la página muestra un error con la URL del contexto.

FAQ

¿Qué pasa con los objetos anidados?

Cada objeto anidado pasa a ser su propia entrada en @graph y el padre conserva solo una referencia, como "customer": {"@id": "_:b0"}.

¿Por qué un array de un solo elemento se muestra como objeto?

Como el resultado está compactado, una propiedad con un solo valor (orderedItem arriba) se escribe sin el array.

¿Se fusiona el mismo nodo si aparece dos veces?

Sí. Los nodos con el mismo @id se fusionan en una sola entrada con todas sus propiedades.

Especificaciones y referencias