diff --git a/bilby/core/result.py b/bilby/core/result.py
index 060ce6430d36412158500a07314b947fe27a2665..99efa4912244595ffb2db0ab5e125234bea3eb59 100644
--- a/bilby/core/result.py
+++ b/bilby/core/result.py
@@ -538,10 +538,17 @@ class Result(object):
     @classmethod
     @docstring(_load_doctstring.format(format="json"))
     def from_json(cls, filename=None, outdir=None, label=None, gzip=False):
+        from json.decoder import JSONDecodeError
+
         filename = _determine_file_name(filename, outdir, label, 'json', gzip)
 
         if os.path.isfile(filename):
-            dictionary = load_json(filename, gzip)
+            try:
+                dictionary = load_json(filename, gzip)
+            except JSONDecodeError as e:
+                raise IOError(
+                    "JSON failed to decode {} with message {}".format(filename, e)
+                )
             try:
                 return cls(**dictionary)
             except TypeError as e:
diff --git a/test/core/result_test.py b/test/core/result_test.py
index b2a7c24c1776f295fe0964094b42242c00704bd0..f49e4a3a25727f45d268df0952cc4659ebd9d1be 100644
--- a/test/core/result_test.py
+++ b/test/core/result_test.py
@@ -134,6 +134,25 @@ class TestResult(unittest.TestCase):
         with self.assertRaises(IOError):
             bilby.core.result.read_in_result(filename="not/a/file.json")
 
+        with self.assertRaises(IOError):
+            incomplete_json = """
+{
+  "label": "label",
+  "outdir": "outdir",
+  "sampler": "dynesty",
+  "log_evidence": 0,
+  "log_evidence_err": 0,
+  "log_noise_evidence": 0,
+  "log_bayes_factor": 0,
+  "priors": {
+    "chirp_mass": {
+"""
+            with open("{}/incomplete.json".format(self.result.outdir), "wb") as ff:
+                ff.write(incomplete_json)
+            bilby.core.result.read_in_result(
+                filename="{}/incomplete.json".format(self.result.outdir)
+            )
+
     def test_unset_priors(self):
         result = bilby.core.result.Result(
             label="label",