objeto - python leer y escribir datos en formato json




Analizar valores de un archivo JSON? (6)

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

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

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 JSON de Python en el mismo enlace proporcionado.

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?


Creo que lo que Ignacio está diciendo es que su 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 puedes encontrar valores así:

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

Pruébalos y ve si comienza a tener sentido.


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 debe verse como asumiendo que el archivo connection.json se ve como arriba

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

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"}
}

Su código debe 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 superior, ya que depende de la with-statement . En Python 2.5, use from __future__ import with_statement , en Python <= 2.4, vea la respuesta de Justin Peel , en la que se basa esta respuesta.

Ahora también puedes 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'

   # 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

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




parsing