sintesis

JSON

Códigos disponibles en git

¿Por qué?

contextoXML

¿Qué?

  • La Notación de Objetos de JavaScript (JSON) es un formato de intercambio de datos ligero, basado en texto e independiente del idioma.

    • JSON define un pequeño conjunto de reglas de formato para la representación portátil de datos estructurados.

    • Se derivó del estándar de lenguaje de programación ECMAScript.

  • Pero no es un subconjunto!!! Añade comillas dobles al identificador de la clave de los miembros (clave/valor) de los objetos porque no podría aceptar un identificador coincidente con palabras reservadas del lenguaje Javascript: for, let, function, …​ que alguien podría querer usar para transmitir su información

JSON

JavaScript

{
  "name" : "Luis Fernández",
  "function" : "profesor"
}
{
  name : "Luis Fernández",
  functionality : "profesor"
  //function : "profesor"
}

¿Para qué?

  • Persistencia

    • "pequeñas Bases de Datos" para una configuración o una web estática: tu curriculum, tus recetas, …​

visualCode
swagger

¿Cómo?

Sintaxis

value

whitespace

object

array

string

number

true

conElemento

conElemento
{
  "property" : null
}

elementoVacioV1

elementoVacioV1
{
    "property1" : "informacion",
    "property2" : 0,
    "property3" : {
        "property31" : "informacion",
        "property32" : "informacion",
        "property33" : "informacion"
    },
    "propertyN" : true
}

objectObject

objectObject
{
    "property1" : "informacion",
    "property2" : 0,
    "properties" : [
        "informacion",
        "informacion",
        "informacion"
    ],
    "propertyN" : true
}

elementoEstructurado

elementoEstructurado
[
    "informacion",
    0,
    [
        "informacion",
        "informacion",
        "informacion"
    ],
    true
]

arrayArray

elementoEstructurado
[
  "informacion",
  {
    "property" : "informacion"
  },
  "informacion",
  {
    "property" : "informacion"
  },
  "informacion"
]

elementoMixto

elementoEstructurado

Antipatrones

{
    "MIT" : "77 Massachusetts Avenue. Cambridge\nMassachusetts 02139. United States of America"
}

error

error
  • Error: Confunde metainformación e información, impidiendo consultas de información futuras. Los identificadores de los elementos deben coincidir con los campos de una estructura, registro, atributos de clase, entidad, …​ No sus valores particulares, imposibles de adivinar por parte del procesador, validador, formateador, …​

  • Error: Formatea la información con saltos de linea, subrayados, …​ perjudicando el tratamiento de información para un formato no previsto en un nuevo dispositivo

  • Posible error: Inadecuada estructuración, estructurando en exceso o defecto la información suministrada, inadecuada para el procesamiento necesario

  • Correcto o incorrecto si el sistema de información necesita tratar la calle y/o la ciudad por separado y/o …​

    • Obligando al programador a analizar la información

{
    "addressee" : "MIT",
    "street" : "77 Massachusetts Avenue. Cambridge",
    "country" : "Massachusetts 02139. United States of America"
}

incorrecto

incorrecto
{
    "addressee" : "MIT",
    "street" : "77 Massachusetts Avenue",
    "village" : "Cambridge",
    "county" : "Massachusetts",
    "country" : "United States of America",
    "postcode" : "02139"
}

correctoV1

correctoV1
image:correctoV2.png[]
{
    "addressee" : "MIT",
    "number" : 77,
    "street" : "Massachusetts Avenue",
    "village" : "Cambridge",
    "county" : "Massachusetts",
    "country" : "United States of America",
    "postcode" : "02139"
}

correctoV2

correctoV2

Patrones

Colección heterogénea

  • Los nombres de los elementos coinciden con los nombres de los campos o atributos de las entidades,registros, estructuras, …​, clases, …​ de los lenguajes de programación

    • No se permiten nombres de propiedad repetidos

{
    "field_A" : "data_A",
    "field_B" : "data_B",
    "field_Z" : "data_Z"
}

src

{
    "name" : "Edsger Wybe",
    "surname" : "Dijkstra",
    "birthday" : {
        "day" : 11,
        "month" : 5,
        "year" : 1930
    },
    "turingAward" : 1972
}

author

Colección homogénea

  • Los items coinciden con los elementos de los arrays, vectores, listas, …​ de los lenguajes de programación

[
    "item_A",
    "item_B",
    "item_C"
]

src2

[
        877,
        743,
        33,
        7980,
        343,
        234,
        55,
        689
]

keys

[
    {
        "name": "Ingeniería del Software",
        "courses": [
            "Programación",
            "Diseño",
            "Pruebas",
            "Análisis",
            "Requisitos",
            "Gestión"
        ]
    },
    {
        "name": "Ingeniería Web",
        "courses": [
            "Visión General",
            "Front-End Web",
            "Front-End Móvil",
            "Back-End de Código Abierto",
            "Back-End de Código Libre",
            "Back-End de Código Privativo"
        ]
    }
]

studies

[
        {
                "name": "Sr. Francisco Ansó García",
                "street": "Calle Lucas Rey Kalea, 15, 5ºB",
                "postalCode": "01468 Amurrio",
                "province": "Álava"
        },
        {
                "name": "Dña. Antonia Fernandez García",
                "street": "Av. de las Delicias, 14, 1º Dcha.",
                "postalCode": "15810  Arzúa",
                "province": "La Coruña"
        },
        {
                "name": "Sr. Raúl Peña Peña",
                "street": "Calle Murcia, 22, Bajo C",
                "postalCode": "28020 Madrid",
                "province": "Madrid"
        }
]

addresses

Aplicación

Árboles

src3

{
    "node": "Elemento_1",
    "trees": [
        {
            "node": "Elemento_11",
            "trees": [
                {
                    "node": "Elemento_111",
                    "trees": []
                },
                {
                    "node": "Elemento_112",
                    "trees": []
                },
                {
                    "node": "Elemento_113",
                    "trees": [
                        {
                            "node": "Elemento_1131",
                            "trees": []
                        }
                    ]
                }
            ]
        },
        {
            "node": "Elemento_12",
            "trees": []
        }
    ]
}
{
    "title" : "Chrome",
    "options" : [
        "Nueva pestaña",
        "Nueva ventana",
        "Nueva ventana de incógnito",
        {
            "title" : "Ayuda",
            "options" : [
                "Información de Google Chrome",
                "Centro de Ayuda",
                "Notificar un error"
            ]
        },
        "Salir"
    ]
}

menu

Grafos

src4

{
    "nodes" : [
        "kA",
        "kB",
        "kZ"
    ],
    "edges" : [
        {
            "from" : "kB",
            "to" : "kA"
        },
        {
            "from" : "kZ",
            "to" : "kA"
        },
        {
            "from" : "kZ",
            "to" : "kB"
        }
    ]
}
[
    {
        "node" : "kA",
        "edges" : [
        ]
    },
    {
        "node" : "kB",
        "edges" : [
            "kA"
        ]
    },
    {
        "node" : "kZ",
        "edges" : [
            "kA",
            "kB"
        ]
    }
]

src5

bibliography0

{
    "books" : [
        {
            "id" : 1,
            "author" : "Frederick P. Brooks",
            "title" : "The Mythical Man Month. Essays on Software Engineering",
            "year" : 1995,
            "publisher" : "Prentice Hall",
            "referemces" :[
            ]
        },
        {
            "id" : 2,
            "author" :  "Grady Booch",
            "title" : "Object Oriented Analysis and Design with Applications",
            "year" : 2011,
            "publisher" : "Addison-Wesley",
            "referemces" :[
                1
            ]
        },
        {
            "id" : 1,
            "author" :  "Robert C. Martin",
            "title" : "Clean Code. A Handbook of Agile Software Craftsmanship",
            "year" : 2008,
            "publisher" : "Prentice Hall",
            "referemces" :[
                1,
                2
            ]
        }
    ],
    "references" : [
        {
            "from" : 2,
            "to" : 1
        },
        {
            "from" : 3,
            "to" : 2
        },
        {
            "from" : 3,
            "to" : 1
        }
    ]
}
[
    {
        "id" : 1,
        "author" : "Frederick P. Brooks",
        "title" : "The Mythical Man Month. Essays on Software Engineering",
        "year" : 1995,
        "publisher" : "Prentice Hall",
        "referemces" :[
        ]
    },
    {
        "id" : 2,
        "author" :  "Grady Booch",
        "title" : "Object Oriented Analysis and Design with Applications",
        "year" : 2011,
        "publisher" : "Addison-Wesley",
        "referemces" :[
            1
        ]
    },
    {
        "id" : 1,
        "author" :  "Robert C. Martin",
        "title" : "Clean Code. A Handbook of Agile Software Craftsmanship",
        "year" : 2008,
        "publisher" : "Prentice Hall",
        "referemces" :[
            1,
            2
        ]
    }
]

bibliography1

Aplicación

Síntesis

sintesis

Bibliografía

Obra, Autor y Edición Portada Obra, Autor y Edición Portada

jsonOrg

Ponente

  • Luis Fernández Muñoz

setillo

  • Doctor en Inteligencia Artificial por la UPM

  • Ingeniero en Informática por la UMA

  • Diplomado en Informática por la UPM

  • Profesor Titular de ETSISI de la UPM