seqio - read fasta python
¿Puede json.loads ignorar las comas finales? (3)
En Python puedes tener comas finales dentro de los diccionarios y las listas, así que deberíamos poder aprovechar esto usando ast.literal_eval :
import ast, json
str = ''{"key1": "value1", "key2": "value2",}''
python_obj = ast.literal_eval(str)
# python_obj is {''key1'': ''value1'', ''key2'': ''value2''}
json_str = json.dumps(python_obj)
# json_str is ''{"key1": "value1", "key2": "value2"}''
Sin embargo, JSON no es exactamente python, por lo que hay algunos casos de borde en esto. Por ejemplo, valores como null, true, false no existen en python. Podemos reemplazar aquellos con equivalentes de python válidos antes de ejecutar la evaluación:
import ast, json
def clean_json(str):
str = str.replace(''null'', ''None'').replace(''true'', ''True'').replace(''false'', ''False'')
return json.dumps(ast.literal_eval(str))
Lamentablemente, esto estropeará cualquier cadena que tenga las palabras null, true o false en ellas.
{"sentence": "show your true colors"}
se convertiría
{"sentence": "show your True colors"}
Como se mencionó en esta pregunta de StackOverflow , no se le permite tener comas finales en json. Por ejemplo, este
{
"key1": "value1",
"key2": "value2"
}
esta bien, pero esto
{
"key1": "value1",
"key2": "value2",
}
No es válida la sintaxis.
Por las razones mencionadas en esta otra pregunta de StackOverflow , usar una coma al final es legal (¿y quizás se recomienda?) En el código de Python. Estoy trabajando con Python y JSON, por lo que me encantaría poder ser coherente en ambos tipos de archivos. ¿Hay alguna manera de que json.loads
ignore las comas al final?
Pele las comas antes de pasar el valor en.
import re
def clean_json(string):
string = re.sub(",[ /t/r/n]+}", "}", string)
string = re.sub(",[ /t/r/n]+/]", "]", string)
return string
Puedes envolver el analizador json de python con jsoncomment
JSON Comment permite analizar archivos o cadenas JSON con:
- Comentarios de línea única y múltiple
- Cadenas de datos multilínea
- Arrastrar comas en objetos y matrices, después del último elemento
Ejemplo de uso:
import json
from jsoncomment import JsonComment
with open(filename) as data_file:
parser = JsonComment(json)
data = parser.load(data_file)