Pregunta ¿Analizar valores desde un archivo JSON?


Tengo este JSON en un archivo:

{
    "maps": [
        {
            "id": "blabla",
            "iscategorical": "0"
        },
        {
            "id": "blabla",
            "iscategorical": "0"
        }
    ],
    "masks": [
        "id": "valore"
    ],
    "om_points": "value",
    "parameters": [
        "id": "valore"
    ]
}

Escribí este script que imprime todo el texto json:

json_data=open(file_directory).read()

data = json.loads(json_data)
pprint(data)

¿Cómo puedo analizar el archivo y extraer valores individuales?


1101
2018-05-14 15:54


origen


Respuestas:


Creo que lo que Ignacio está diciendo es que tu archivo JSON es incorrecto. Tienes [] cuando deberías tener {}. [] son para listas, {} son para diccionarios.

Así es como debería verse su archivo JSON, su archivo JSON ni siquiera se cargaría para mí:

{
    "maps": [
        {
            "id": "blabla",
            "iscategorical": "0"
        },
        {
            "id": "blabla",
            "iscategorical": "0"
        }
    ],
    "masks": {
        "id": "valore"
    },
    "om_points": "value",
    "parameters": {
        "id": "valore"
    }
}

Entonces puedes usar tu código:

import json
from pprint import pprint

with open('data.json') as f:
    data = json.load(f)

pprint(data)

Con los datos, ahora también puede encontrar valores como ese:

data["maps"][0]["id"]
data["masks"]["id"]
data["om_points"]

Pruébalos y ve si comienza a tener sentido.


1653
2018-05-14 16:10



Tu data.json debería verse así:

{
 "maps":[
         {"id":"blabla","iscategorical":"0"},
         {"id":"blabla","iscategorical":"0"}
        ],
"masks":
         {"id":"valore"},
"om_points":"value",
"parameters":
         {"id":"valore"}
}

Tu código debería ser:

import json
from pprint import pprint

with open('data.json') as data_file:    
    data = json.load(data_file)
pprint(data)

Tenga en cuenta que esto solo funciona en Python 2.6 y posteriores, ya que depende de la with-declaración. En Python 2.5 uso from __future__ import with_statement, en Python <= 2.4, ver La respuesta de Justin Peel, en el que se basa esta respuesta.

Ahora también puede acceder a valores únicos como este:

data["maps"][0]["id"]  # will return 'blabla'
data["masks"]["id"]    # will return 'valore'
data["om_points"]      # will return 'value'

268
2017-11-29 20:10



La respuesta de @Justin Peel es realmente útil, pero si está utilizando Python 3, la lectura de JSON debe hacerse así:

with open('data.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())

Nota: uso json.loads en lugar de json.load. En Python 3, json.loads toma un parámetro de cadena. json.load toma un parámetro de objeto similar a un archivo. data_file.read() devuelve un objeto de cadena.


60
2018-05-22 03:44



data = []
with codecs.open('d:\output.txt','rU','utf-8') as f:
    for line in f:
       data.append(json.loads(line))

47
2018-05-12 20:47



"Ultra JSON" o simplemente "ujson" puede manejar tener [] en tu entrada de archivo JSON. Si está leyendo un archivo de entrada JSON en su programa como una lista de elementos JSON; como, [{[{}]}, {}, [], etc...] ujson puede manejar cualquier orden arbitraria de listas de diccionarios, diccionarios de listas.

Puedes encontrar a ujson en el Índice de paquete Python y la API es casi idéntica a la incorporada de Python json biblioteca.

ujson también es mucho más rápido si está cargando archivos JSON más grandes. Puede ver los detalles de rendimiento en comparación con otras bibliotecas Python JSON en el mismo enlace proporcionado.


11
2018-03-09 21:38



si estás en Python 3 aquí es cómo puedes hacerlo

{
  "connection1": {
    "DSN": "con1",
    "UID": "abc",
    "PWD": "1234",
    "connection_string_python":"test1"
  }
  ,
  "connection2": {
    "DSN": "con2",
    "UID": "def",
    "PWD": "1234"
  }
}

El código debería parecerse al supuesto de que el archivo connection.json tiene el aspecto anterior

connection_file = open('connection.json', 'r')
conn_string = json.load(connection_file)
conn_string['connection1']['connection_string_python'])
connection_file.close()
>>>test1

6
2018-04-25 17:42



   # Here you go with modified json file:
   # data.json file : 
    {
        "maps": [
            {
                "id": "blabla",
                "iscategorical": "0"
            },
            {
                "id": "blabla",
                "iscategorical": "0"
            }
        ],
        "masks": [{
            "id": "valore"
        }],
        "om_points": "value",
        "parameters": [{
            "id": "valore"
        }]
    }


   # You can call or print data on console by using below lines

    import json
    from pprint import pprint
    with open('data.json') as data_file:
        data_item = json.load(data_file)
    pprint(data_item)

    print(data_item['parameters'][0]['id'])

    #Output : 
    #pprint(data_item) output as :

    {'maps': [{'id': 'blabla', 'iscategorical': '0'},
              {'id': 'blabla', 'iscategorical': '0'}],
     'masks': [{'id': 'valore'}],
     'om_points': 'value',
     'parameters': [{'id': 'valore'}]}
    #print(data_item['parameters'][0]['id']) output as :
    valore

4
2017-11-07 01:53