Código Python para carregar dados de algum arquivo JSON longo e complicado:
with open(filename, "r") as f:
data = json.loads(f.read())
(nota: a melhor versão do código deve ser:
with open(filename, "r") as f:
data = json.load(f)
mas ambos exibem comportamento semelhante)
Para muitos tipos de erro JSON (delimitadores ausentes, barras invertidas incorretas em cadeias, etc.), isso imprime uma boa mensagem útil contendo o número da linha e da coluna onde o erro JSON foi encontrado.
No entanto, para outros tipos de erro JSON (incluindo o clássico "usando vírgula no último item de uma lista", mas também outras coisas como capitalizar verdadeiro / falso), a saída do Python é apenas:
Traceback (most recent call last):
File "myfile.py", line 8, in myfunction
config = json.loads(f.read())
File "c:\python27\lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "c:\python27\lib\json\decoder.py", line 360, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\python27\lib\json\decoder.py", line 378, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Para esse tipo de ValueError, como você faz com que o Python diga onde está o erro no arquivo JSON?
json.load(f)
vez dejson.loads(f.read())