Cargar archivo JSON en PostgreSQL

Como se conoce PostgreSQL permite el almacenamiento de datos en formato JSON a través de los tipos de datos JSON y JSONB, además hemos comentado en otras publicaciones las ventajas de JSONB sobre JSON, en este caso de hoy mostraremos como cargar un archivo JSON a un campo de una tabla de PostgreSQL de una manera sencilla solo utilizado comandos de PostgreSQL , para eso utilizaremos un archivo de ejemplo del sitio  https://github.com/ozlerhakan/mongodb-json-files/tree/master/datasets en el cual seleccionamos el de students, que  tienes los datos de de estudiantes

{"_id":0,"name":"aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]} {"_id":1,"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]} {"_id":2,"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]} {"_id":3,"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]} …

Para esto crearemos una tabla con un campo de tipo JSONB y con el comando COPY hacemos la carga del archivo en la tabla

 json_load=# create table jsob_load (data_json jsonb); 
json_load=# copy jsob_load (data_json) from '/tmp/students.json';
 COPY 200
json_load=# select * from jsob_load limit 4;
 data_json -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
{"_id": 0, "name": "aimee Zank", "scores": [{"type": "exam", "score": 1.463179736705023}, {"type": "quiz", "score": 11.78273309957772}, {"type": "homework", "score": 35.8740349954354}]} 
{"_id": 1, "name": "Aurelia Menendez", "scores": [{"type": "exam", "score": 60.06045071030959}, {"type": "quiz", "score": 52.79790691903873}, {"type": "homework", "score": 71.76133439165544}]}
{"_id": 2, "name": "Corliss Zuk", "scores": [{"type": "exam", "score": 67.03077096065002}, {"type": "quiz", "score": 6.301851677835235}, {"type": "homework", "score": 66.28344683278382}]} 
{"_id": 3, "name": "Bao Ziglar", "scores": [{"type": "exam", "score": 71.64343899778332}, {"type": "quiz", "score": 24.80221293650313}, {"type": "homework", "score": 42.26147058804812}]}
 (4 filas) 

Como ven es sencillo esta actividad, la cual funciona si declaramos el tipo de dato JSON en vez de JSONB, lo que el JSONB tiene sus ventajas como describimos en JSONB un JSON superior en PostgreSQL ,  además de utilizar todas opciones de manejo de JSON que tiene PostgreSQL, que son varias 😉 , nos vemos en otra y a cargar JSON para PostgreSQL

12 comentarios en “Cargar archivo JSON en PostgreSQL

      • Realice lo siguiente:

        postgres=# CREATE DATABASE bdatos ENCODING ‘utf8’;
        CREATE DATABASE

        postgres=# CREATE TABLE jsob_load (data_json jsonb);
        CREATE TABLE

        postgres=# copy jsob_load (data_json) from ‘/home/kenia/Escritorio/c.json’;

        ERROR: invalid input syntax for type json
        DETAIL: Token “/” is invalid.
        CONTEXT: JSON data, line 1: …12″, “overview” : “AdventNet is now <a href="/…
        COPY jsob_load, line 1, column data_json: "{ "_id" : { "$oid" : "52cdef7c4bab8bd675297d8b" }, "name" : "AdventNet", "permalink" : "abc3", "crun…"

        Me gusta

      • {
        “_id”:{
        “$oid”:”52cdef7c4bab8bd675297d8b”
        },
        “name”:”AdventNet”,
        “permalink”:”abc3″,
        “crunchbase_url”:”http://www.crunchbase.com/company/adventnet”,
        “homepage_url”:”http://adventnet.com”,
        “blog_url”:””,
        “blog_feed_url”:””,
        “twitter_username”:”manageengine”,
        “category_code”:”enterprise”,
        “number_of_employees”:600,
        “founded_year”:1996,
        “deadpooled_year”:2,
        “tag_list”:””,
        “alias_list”:”Zoho ManageEngine “,
        “email_address”:”pr@adventnet.com”,
        “phone_number”:”925-924-9500″,
        “description”:”Server Management Software”,
        “created_at”:{
        “$date”:1180121062000
        },
        “updated_at”:”Wed Oct 31 18:26:09 UTC 2012″,
        “overview”:”AdventNet is now Zoho ManageEngine.\n\nFounded in 1996, AdventNet has served a diverse range of enterprise IT, networking and telecom customers.\n\nAdventNet supplies server and network management software.”,
        “image”:{
        “available_sizes”:[
        [
        [
        150,
        55
        ],
        “assets/images/resized/0001/9732/19732v1-max-150×150.png”
        ],
        [
        [
        150,
        55
        ],
        “assets/images/resized/0001/9732/19732v1-max-250×250.png”
        ],
        [
        [
        150,
        55
        ],
        “assets/images/resized/0001/9732/19732v1-max-450×450.png”
        ]
        ]
        },
        “products”:[

        ],
        “relationships”:[
        {
        “is_past”:true,
        “title”:”CEO and Co-Founder”,
        “person”:{
        “first_name”:”Sridhar”,
        “last_name”:”Vembu”,
        “permalink”:”sridhar-vembu”
        }
        },
        {
        “is_past”:true,
        “title”:”VP of Business Dev”,
        “person”:{
        “first_name”:”Neil”,
        “last_name”:”Butani”,
        “permalink”:”neil-butani”
        }
        },
        {
        “is_past”:true,
        “title”:”Usabiliy Engineer”,
        “person”:{
        “first_name”:”Bharath”,
        “last_name”:”Balasubramanian”,
        “permalink”:”bharath-balasibramanian”
        }
        },
        {
        “is_past”:true,
        “title”:”Director of Engineering”,
        “person”:{
        “first_name”:”Rajendran”,
        “last_name”:”Dandapani”,
        “permalink”:”rajendran-dandapani”
        }
        },
        {
        “is_past”:true,
        “title”:”Market Analyst”,
        “person”:{
        “first_name”:”Aravind”,
        “last_name”:”Natarajan”,
        “permalink”:”aravind-natarajan”
        }
        },
        {
        “is_past”:true,
        “title”:”Director of Product Management”,
        “person”:{
        “first_name”:”Hyther”,
        “last_name”:”Nizam”,
        “permalink”:”hyther-nizam”
        }
        },
        {
        “is_past”:true,
        “title”:”Western Regional OEM Sales Manager”,
        “person”:{
        “first_name”:”Ian”,
        “last_name”:”Wenig”,
        “permalink”:”ian-wenig”
        }
        }
        ],
        “competitions”:[

        ],
        “providerships”:[
        {
        “title”:”DHFH”,
        “is_past”:true,
        “provider”:{
        “name”:”A Small Orange”,
        “permalink”:”a-small-orange”
        }
        }
        ],
        “total_money_raised”:”$0″,
        “funding_rounds”:[

        ],
        “investments”:[

        ],
        “acquisition”:null,
        “acquisitions”:[

        ],
        “offices”:[
        {
        “description”:”Headquarters”,
        “address1″:”4900 Hopyard Rd.”,
        “address2″:”Suite 310”,
        “zip_code”:”94588″,
        “city”:”Pleasanton”,
        “state_code”:”CA”,
        “country_code”:”USA”,
        “latitude”:37.692934,
        “longitude”:-121.904945
        }
        ],
        “milestones”:[

        ],
        “video_embeds”:[

        ],
        “screenshots”:[
        {
        “available_sizes”:[
        [
        [
        150,
        94
        ],
        “assets/images/resized/0004/3400/43400v1-max-150×150.png”
        ],
        [
        [
        250,
        156
        ],
        “assets/images/resized/0004/3400/43400v1-max-250×250.png”
        ],
        [
        [
        450,
        282
        ],
        “assets/images/resized/0004/3400/43400v1-max-450×450.png”
        ]
        ],
        “attribution”:null
        }
        ],
        “external_links”:[

        ],
        “partners”:[

        ]
        }

        Me gusta

  1. Probé tu archivo json y el comando copy y funciona perfectamente; en cambio, mi archivo json tiene problemas en el formato. Gracias por la ayuda Anthony.

    Me gusta

  2. Hola nuevamente, el problema creo que esta que dentro de los datos de los JSON, hay datos con comillas dobles por ejemplo:

    en el primer valor del json que hay esta el valor
    “source_description” : “LEAD411 LAUNCHES \”HOTTEST SEATTLE COMPANIES\” AWARDS”

    ahi debes escapar esas comillas con el (\”) \”HOTTEST SEATTLE COMPANIES\” que en mi caso las reemplace por (‘)

    eso es solo un ejemplo, pueden haber mas casos internamente

    espero que puedas resolver

    saludos

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s