/ / El elemento de eliminación de Python de JSON provoca errores de Unicode: Python, Json, Unicode

Elemento de eliminación de Python de JSON provoca errores Unicode: python, json, unicode

Tengo una lista de los condados de EE. UU. Que descargué de Wikipedia usando import.io, pero produjo varios elementos para cada condado que quiero que salgan del documento (por ejemplo, las URL).

Estoy realmente confundido porque pensé que JSON docsestaban en Unicode, aunque he visto preguntas / respuestas similares sobre este tema, digamos simplemente pop o eliminar el elemento. Cuando trato de hacer pop o eliminar aparece un error que dice que no puedes "t del unicode y no hay pop en unicode . ¿Qué me estoy perdiendo?

Ejemplo de entrada en el JSON Doc

`
"data":[{"state/_text":["Alabama"],
"county":["http://en.wikipedia.org/wiki/Autauga_County,_Alabama"],
"state":["http://en.wikipedia.org/wiki/Alabama"],
"state/_source":["/wiki/Alabama"],
"state/_title":["Alabama"],
"county/_title":["Autauga County, Alabama"],
"county/_text":["Autauga County"],
"county/_source":["/wiki/Autauga_County,_Alabama"],`

Mi código:

`import json`

`countiesDoc = json.load(open("US_Counties.json"))
for element in countiesDoc:
del element["county"]`

`open("updated_US_Counties.json", "w").write(
json.dumps(countiesDoc, sort_keys=true, indent=4, separators=(",", ": "))
)`

Rastrear:

`Traceback (most recent call last):
File "edit_us_counties.py", line 10, in <module>
del element["county"]
TypeError: "unicode" object does not support item deletion`

`Process finished with exit code 1`

Respuestas

1 para la respuesta № 1

countiesDoc debería ser un Python dict después de cargar. Iterando sobre un dict devuelve las claves, que son cadenas; por lo tanto, element es una cuerda Ejemplo:

import json

jstr = """
{
"element":"value",
"other":123
}
"""

doc = json.loads(jstr)
print("doc",type(doc))
for e in doc:
print("e",e,type(e))

Salida:

doc <class "dict">
e element <class "str">
e other <class "str">

No sé el formato de su documento, pero probablemente solo quiera lo siguiente asumiendo county es una clave:

del countiesDoc["county"]

0 para la respuesta № 2

Estás confundiendo algunas cosas.

JSON puede codificar todo tipo de cosas (números, booleanos, cadenas, matrices o diccionarios de cualquiera de los anteriores) en una gran cadena.

El servidor usa JSON para codificar una matriz o diccionario en una cadena grande, luego lo envía por cable a su programa. Entonces necesitas descodificar para recuperar una matriz o diccionario (en términos de Python, un list o dict) Hasta que hagas eso, todo lo que tienes es una cuerda. Y no puedes "t pop o delete de una cuerda


Asi que:

import json

j = <however you retrieve the JSON document>
obj = json.loads(j)
del obj["key_i_want_gone"]

Y, por supuesto, si desea enviar el diccionario modificado de vuelta al servidor, o escribirlo en un archivo de texto, o lo que sea, es probable que primero necesite volver a codificarlo como JSON:

j = json.dumps(obj)
<however you save or upload or whatever a JSON document>

La razón por la que recibe mensajes de error sobre Unicode es que en Python 2.x, el nombre del tipo que contiene cadenas Unicode es unicode. Entonces, cuando llamas pop en esa cadena, está intentando llamar a un método llamado unicode.pop, y no existe tal método.

Es básicamente una coincidencia que la APIque está utilizando para recuperar el documento le da una cadena Unicode, y JSON se define como codificación a cadenas Unicode, y JSON puede tomar cadenas Unicode como una de las cosas que puede codificar, y así sucesivamente. (Bueno, no es una coincidencia. La mayoría de las nuevas API, formatos de documentos, etc. usan Unicode porque es la mejor manera de poder manejar la mayoría de los caracteres en la mayoría de los idiomas que le interesan a las personas. Pero el error no tiene nada que ver con si JSON las cadenas son Unicode o algo diferente).