JSONDecodeErrror while trying to decide JSON from file - python

I am trying to create a very simple blockchain with Python.
import json
import os
import hashlib
blockchain_dir = os.curdir + "/blockchain/"
The code can save blocks, but if want to use the check_integrity function I get an JSONDecodeError:
def get_hash(filename):
file = open(blockchain_dir + filename, "rb").read()
return hashlib.md5(file).hexdigest()
def get_files():
files = os.listdir(blockchain_dir)
return sorted([int(i) for i in files])
def check_integrity():
files = get_files()
results = []
for file in files[:1]:
f = open(blockchain_dir + str(file))
h = json.load(f)['hash']
prev_file = str(file - 1)
actual_hash = get_hash(prev_file)
if h == actual_hash:
res = 'OK'
else:
res = 'Corrupted'
results.append({'block': prev_file, 'result': res})
return results
def write_block(name, amount, to_whom, prev_hash=''):
files = get_files()
prev_file = files[-1]
file_name = str(prev_file + 1)
prev_hash = get_hash(str(prev_file))
data = {"name": name,
"amount": amount,
"to_whom": to_whom,
"hash": prev_hash}
with open(blockchain_dir + file_name, "w") as file:
json.dump(data, file, indent=4, ensure_ascii=False)
def main():
write_block("Friend", 120, "Me")
print(check_integrity())
if __name__ == "__main__":
main()
Traceback (most recent call last):
File "/Python/blockchain/block.py", line 67, in <module>
main()
File "/Python/blockchain/block.py", line 64, in main
print(check_integrity())
File "/Python/blockchain/block.py", line 31, in check_integrity
h = json.load(f)['hash'] # method load - take object and return json object, hash - it is key in the block file, we get hash from the block file and compare it with hash that we get after function get_hash
File "/usr/lib/python3.9/json/__init__.py", line 293, in load
return loads(fp.read(),
File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
What is the problem, and how can I fix it?

The issue is that the json file you're trying to parse is empty.I'm not familiar with any method to automatically check if a json file is empty, apart from checking for such an occurrence manually. You can manually check and confirm whether a json file is empty by adding a try-except statement in your check integrity function i.e:
try:
h = json.load(f)['hash']
except KeyError:
...
The keyerror catches a scenario where the "hash" key is empty therefore suggesting the data your trying to access doesn't exist.

Related

JSON decode error since I switched from macOS to Windows

I have a Python file that worked perfectly on my macbook.
Once I moved it to window, for some reason it gave me new error.
this is the errors im getting:
Traceback (most recent call last):
File "C:/Users/chadi/PycharmProjects/untitled4/main.py", line 3, in <module>
from main_controller import Ui_MainController
File "C:\Users\chadi\PycharmProjects\untitled4\main_controller.py", line 6, in <module>
from get_companies import load_companies
File "C:\Users\chadi\PycharmProjects\untitled4\get_companies.py", line 10, in <module>
json_read('convertcsv.json')
File "C:\Users\chadi\PycharmProjects\untitled4\get_companies.py", line 8, in json_read
data = (json.load(f_in))
File "C:\Users\chadi\anaconda3\envs\untitled4\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
File "C:\Users\chadi\anaconda3\envs\untitled4\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\chadi\anaconda3\envs\untitled4\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\chadi\anaconda3\envs\untitled4\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Process finished with exit code 1
this is all the parts where i load a JSON file:
def json_read(filename):
with open(filename) as f_in:
global data
data = (json.load(f_in))
json_read('convertcsv.json')
def mark_employee_unavailability(service,employee,reason,start_date,end_date):
with open('info_inspecteurs.json') as json_file:
data = json.load(json_file)
for i in range(len(data)):
if data[i]['n_inspecteur'] == employee:
event_email = data[i]['email_inspecteur']
break
def json_read(filename):
with open(filename) as f_in:
global data
data = (json.load(f_in))
def get_employee_info(n_inspecteur):
json_read('info_inspecteurs.json')
value = list(filter(lambda x: x["n_inspecteur"] == n_inspecteur, data))[0]
if len(value) > 0:
print(value['ad_inspecteur'], "\n", value['email_inspecteur'])
return (value['ad_inspecteur'],value['email_inspecteur'])
print("no record found")
return None
def load_employees_from_info_inspecteurs():
json_read('info_inspecteurs.json')
employees=[]
for company in data:
employees.append(company['n_inspecteur'])
return employees
I don't know where it came from, or maybe is the new environement I used on Windows? I used anaconda. Does it change anything? I was on VENV on my macOS.
Thank you for your help
The error
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
may just mean that there's no data being read from the target file at all, so json isn't finding any data to parse.
You might troubleshoot by trying to just read the file from that point in your script into a string - if it fails, the problem may be in python execution current directory / relative file path, rather than in the json parsing.
with open ("convertcsv.json", "r") as checkFile:
checkData = checkFile.read()
# print out length or contents of checkData or sim.

How do I stop this decode error in python Json

im practicing with python json, and i made a function that opens a file, and loads the number that was stored in that file, but if that file does not exist, it excepts the error, and ask for input for a favorite number, then dumps that number in the file, then loads it. but i keep getting an error
import json
def get_num():
filename = 'numberssfresdfs.json'
try:
with open(filename) as num:
number = json.load(num)
except FileNotFoundError:
favorite_num = input("Please enter your favorite number ")
with open(filename, 'w') as num:
json.dump(favorite_num, num)
print("Your favorite number is " )
else:
print("I know your favorite number, its " + str(number))
get_num()
I keep getting this error
Traceback (most recent call last):
File "remember_favorite_num.py", line 16, in <module>
get_num()
File "remember_favorite_num.py", line 7, in get_num
number = json.load(num)
File "C:\Users\kenda\AppData\Local\Programs\Python\Python36-
32\lib\json\__init__.py", line 299, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Users\kenda\AppData\Local\Programs\Python\Python36-
32\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Users\kenda\AppData\Local\Programs\Python\Python36-
32\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\kenda\AppData\Local\Programs\Python\Python36-
32\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
You are never reaching the code in your except block because numberssfresdfs.json does exist.
You are getting the json.load error message because numberssfresdfs.json does not contain valid json or is empty.
You can use a json linter (one online linter) to validate that your file contains valid json.
Once you confirm you are working with valid json, you can work through the rest of your logic.

i am making a project on sentiment analysis and i am not able to solve this error related to json

The error I get is:
python3 sentim.py afinn.txt tweet_file
Traceback (most recent call last):
File "sentim.py", line 67, in <module>
main()
File "sentim.py", line 29, in main
js = json.loads(str(line))
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
This is my code, and I am not able to remove the error related to json. My project is based on sentiment analysis on Twitter using afinn.txt
def main():
sent_file = open(sys.argv[1])
tweet_file = open(sys.argv[2])
#hw()
#lines(sent_file)
#lines(tweet_file)
# Read the sentiment file and build dictionary
scores = {} # initialize an empty dictionary
for line in sent_file:
term, score = line.split("\t") # The file is tab delimited.
scores[term] = int(score)
#print scores.items() # Print every (term, score) pair in the dictionary. As a list.
# Read the tweet file: "output.txt"
tweet_data = []
for line in tweet_file:
js = json.loads(str(line))
'''if "lang" in response.keys():
print response["lang"]'''
if "text" in response.keys():
tweet_data.append(response["text"])
#print response["text"]
#print response.keys()
#print len(tweet_data)
# For each tweet
for t in tweet_data:
total = 0
# Convert from <type 'unicode'> to <type 'str'>
encoded_t = t.encode('utf-8')

Error in reading JSON: No JSON object could be decoded

I am reading a set of JSON files using glob and storing them in a list. The length of the list is 1046. When I am reading the JSON file one by one and loading it to run further code, it just runs on 595 files and gives the following error:
Traceback (most recent call last):
File "removeDeleted.py", line 38, in <module>
d = json.load(open(fn))
File "/usr/lib/python2.7/json/__init__.py", line 291, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
I am loading the json files like this:
json_file_names = sorted(glob.glob("./Intel_Shared_Data/gtFine/train/*/*.json"))
for fn in json_file_names:
#print fn
#temp = temp + 1
#count = 0
d = json.load(open(fn))
objects = d["objects"]
for j in range(len(objects)):
Can anybody suggest me way out of this error?
As Blender said, you need to find out which of your files contains invalid JSON. To this end, you need to add some debugging statements to your code:
json_file_names = sorted(glob.glob("./Intel_Shared_Data/gtFine/train/*/*.json"))
for fn in json_file_names:
#print fn
#temp = temp + 1
#count = 0
try:
d = json.load(open(fn))
objects = d["objects"]
for j in range(len(objects)):
except ValueError as e:
print "Could not load {}, invalid JSON".format({})
One of your json text files is empty. Maybe start by seeing if you have any zero size files with
find . -size 0
run from your directory of json files in a terminal.

Try Except Else not functioning

With the following code. Which iterates through a list of message ids and creates the http request and then appends to json. I am having problems with exceptions. The Try except Else doesn't seem to work.
import urllib3
import json
import csv
from progressbar import ProgressBar
import time
pbar = ProgressBar()
base_url = 'https://api.pipedrive.com/v1/mailbox/mailMessages/'
fields = {"include_body": "1", "api_token": "token"}
json_arr = []
http = urllib3.PoolManager()
with open('msgid.csv', newline='') as csvfile:
for x in pbar(csv.reader(csvfile, delimiter=' ', quotechar='|')):
while True:
try:
r = http.request('GET', base_url + "".join(x), fields=fields)
break
except Exception:
time.sleep(1)
mails = json.loads(r.data.decode('utf-8'))
json_arr.append(mails)
with open('JDATA.json', 'w', encoding="utf-8") as outfile:
json.dump(json_arr, outfile)
I literally want it to skip over an error and move on to the next iteration.
but i constantly get this thrown up at random iteration numbers:
Traceback (most recent call last):
File "API.py", line 23, in <module>
mails = json.loads(r.data.decode('utf-8'))
File "C:\Users\Robert Millard\AppData\Local\Programs\Python\Python36- 32\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Users\Robert Millard\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Robert Millard\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Categories

Resources