diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index f47a711bc6f641f6aebcebbeda39ecb597f551f1..425afb89e50fc5895fe49e0e66a92d9a5d733dc2 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -74,7 +74,8 @@ Fixed
   functions.
 * Fixed the :func:`.DeformationField.transform` method so it works with
   a single set of coordinates.
-
+* :class:`.Image` creation does not fail if ``loadMeta`` is set, and a
+  sidecar file containing invalid JSON is present.
 
 Removed
 ^^^^^^^
diff --git a/fsl/data/image.py b/fsl/data/image.py
index 8cc5c62087b25ebe9f463dcc7e95b1f57f3fe484..1dc0aaf93bd1def53bb793d27c0033269eba82e2 100644
--- a/fsl/data/image.py
+++ b/fsl/data/image.py
@@ -1162,11 +1162,19 @@ class Image(Nifti):
         self.register(self.name, self.__headerChanged, topic='transform')
         self.register(self.name, self.__headerChanged, topic='header')
 
+        # calculate min/max
+        # of image data
         if calcRange:
             self.calcRange()
 
+        # try and load metadata
+        # from JSON sidecar files
         if self.dataSource is not None and loadMeta:
-            self.updateMeta(loadMetadata(self))
+            try:
+                self.updateMeta(loadMetadata(self))
+            except Exception as e:
+                log.warning('Failed to load metadata for %s: %s',
+                            self.dataSource, e)
 
         self.__imageWrapper.register(self.__lName, self.__dataRangeChanged)
 
diff --git a/tests/test_image.py b/tests/test_image.py
index 06801c11fae442edcb1e68ab1c3eeda2e440f3a6..75ec686a9cdfba1d682d7b992fdd9820e1573512 100644
--- a/tests/test_image.py
+++ b/tests/test_image.py
@@ -1414,11 +1414,23 @@ def test_loadMeta_nonBids():
         with open(op.join('data', 'dataset_description.json'), 'wt') as f:
             pass
 
-
         img = fslimage.Image(imgfile, loadMeta=True)
         assert list(img.metaKeys()) == []
 
 
+def test_loadMeta_badJSON():
+    with tempdir():
+        make_image('image.nii.gz')
+
+        # spurious comma after b:2
+        with open('image.json', 'wt') as f:
+            f.write('{"a" : 1, "b" : 2,}')
+
+        # bad json should not cause failure
+        img = fslimage.Image('image.nii.gz', loadMeta=True)
+
+        assert list(img.metaKeys()) == []
+
 
 def test_loadMetadata():
     with tempdir():