Как читать json-файл массива объектов с помощью python flask
У меня проблема с чтением файла JSON, этот файл содержит массив объектов следующего вида:
[{"some": 1, "list": [{"one":1}]},{"some": 1, "list": [{"one":1}]}]
мой код выглядит следующим образом:
ls_plano = json.loads(open("tests/mocks/lsplano_itens_pessoais.json", encoding="utf8").read())
покажите мне эту ошибку:
Я пытаюсь прочитать этот файл и поместить этот файл в ls_plano для чтения и присвоения другим значениям, вот так:
ls_plano = json.loads(open("tests/mocks/lsplano_itens_pessoais.json", encoding="utf8").read())
if ls_plano is not None:
for plano in ls_plano:
temp_plano = {}
temp_plano["inPlanoPersonalizado"] = plano.get("inPlanoPersonalizado")
temp_plano["inSelecionado"] = plano.get("inSelecionado")
if plano.get("lsChassi"):
temp_plano["lsChassi"] = self.__map_ls_chassi(plano.get("lsChassi", []))
if plano.get("lsTipoObjetoSegurado"):
temp_plano["lsTipoObjetoSegurado"] = self.__map_ls_tipo_ob_segurado(
plano.get("lsTipoObjetoSegurado")
)
if plano.get("lsComissao"):
temp_plano["lsComissao"] = self.__map_ls_comissao(plano.get("lsComissao", []))
if plano.get("lsParcela"):
temp_plano["lsParcela"] = self.__map_ls_items(plano.get("lsParcela", []))
temp_plano["nmIdentificadorPlano"] = plano.get("nmIdentificadorPlano")
temp_plano["nmPlano"] = plano.get("nmPlano")
temp_plano["nrPlano"] = plano.get("nrPlano")
temp_plano["vlAdicionalFracionamento"] = plano.get("vlAdicionalFracionamento")
temp_plano["vlAssistenciaFacultativa"] = plano.get("vlAssistenciaFacultativa")
temp_plano["vlCobranca"] = plano.get("vlCobranca")
temp_plano["vlComercial"] = plano.get("vlComercial")
temp_plano["vlIof"] = plano.get("vlIof")
temp_plano["vlPremioLiquido"] = plano.get("vlPremioLiquido")
temp_plano["vlPremioNet"] = plano.get("vlPremioNet")
temp_plano["vlPremioTarifa"] = plano.get("vlPremioTarifa")
temp_plano["vlPremioTotal"] = plano.get("vlPremioTotal")
temp_plano["vlTotalComissao"] = plano.get("vlTotalComissao")
temp_plano["vlTotalDesconto"] = plano.get("vlTotalDesconto")
resp.append(temp_plano)
return resp
прошу помочь мне, спасибо за внимание.
Попробуйте использовать with при открытии файлов, это лучший подход, смотрите здесь больше информации.
Этот код работает:
import sys
# Reading the json file
try:
with open("myjsonfile_list_of_dicts.json", "r") as read_content:
ls_plano: dict = json.load(read_content)
except (FileNotFoundError, PermissionError, OSError, ValueError) as e:
print(f"Error opening the file: {e}")
sys.exit()
# Parsing
try:
resp = []
if ls_plano is not None:
for plano in ls_plano:
temp_plano = {"inPlanoPersonalizado": plano.get("inPlanoPersonalizado"),
"inSelecionado": plano.get("inSelecionado")}
if plano.get("lsChassi"):
temp_plano["lsChassi"] = self.__map_ls_chassi(plano.get("lsChassi", []))
if plano.get("lsTipoObjetoSegurado"):
temp_plano["lsTipoObjetoSegurado"] = self.__map_ls_tipo_ob_segurado(
plano.get("lsTipoObjetoSegurado")
)
if plano.get("lsComissao"):
temp_plano["lsComissao"] = self.__map_ls_comissao(plano.get("lsComissao", []))
if plano.get("lsParcela"):
temp_plano["lsParcela"] = self.__map_ls_items(plano.get("lsParcela", []))
temp_plano["nmIdentificadorPlano"] = plano.get("nmIdentificadorPlano")
temp_plano["nmPlano"] = plano.get("nmPlano")
temp_plano["nrPlano"] = plano.get("nrPlano")
temp_plano["vlAdicionalFracionamento"] = plano.get("vlAdicionalFracionamento")
temp_plano["vlAssistenciaFacultativa"] = plano.get("vlAssistenciaFacultativa")
temp_plano["vlCobranca"] = plano.get("vlCobranca")
temp_plano["vlComercial"] = plano.get("vlComercial")
temp_plano["vlIof"] = plano.get("vlIof")
temp_plano["vlPremioLiquido"] = plano.get("vlPremioLiquido")
temp_plano["vlPremioNet"] = plano.get("vlPremioNet")
temp_plano["vlPremioTarifa"] = plano.get("vlPremioTarifa")
temp_plano["vlPremioTotal"] = plano.get("vlPremioTotal")
temp_plano["vlTotalComissao"] = plano.get("vlTotalComissao")
temp_plano["vlTotalDesconto"] = plano.get("vlTotalDesconto")
resp.append(temp_plano)
return resp
except (KeyError, TypeError) as e:
print(f"Error parsing the json file: {e}")
Рекомендации:
- Закомментируйте код
- Используйте try-except
- Открывайте файлы с помощью 'with' .