diff --git a/djblets/db/fields/json_field.py b/djblets/db/fields/json_field.py
index 55e5c945ce4b9c8e440ab6afdc8bd147800d5658..95e33e82c5e1aacd180358e01a36636b8b54ffb3 100644
--- a/djblets/db/fields/json_field.py
+++ b/djblets/db/fields/json_field.py
@@ -273,11 +273,15 @@ class JSONField(models.TextField):
         """
         value = self.value_from_object(instance)
 
-        if value:
+        if isinstance(value, basestring):
             value = self.loads(value)
-        else:
+        elif not isinstance(value, (list, dict, int, float)):
             value = {}
 
+        # Otherwise, if we receive a non-string value, we are likely setting
+        # the attribute to deserialized value before the first save call, so
+        # we pass on value unchanged.
+
         setattr(instance, self.attname, value)
 
     def get_db_prep_save(self, value, *args, **kwargs):
diff --git a/djblets/db/tests/test_json_field.py b/djblets/db/tests/test_json_field.py
index f08c3a00422b5d21c14c3e28ba1b15919b26f68a..343df105a477628c374c7b4b2d4a0dc2ad4746a5 100644
--- a/djblets/db/tests/test_json_field.py
+++ b/djblets/db/tests/test_json_field.py
@@ -8,7 +8,7 @@ from django.db.models import Model
 from django.utils import six
 
 from djblets.db.fields import JSONField, JSONFormField
-from djblets.testing.testcases import TestCase
+from djblets.testing.testcases import TestCase, TestModelsLoaderMixin
 
 
 class JSONFieldTests(TestCase):
@@ -252,3 +252,21 @@ class JSONFormFieldTests(TestCase):
         self.assertEqual(cm.exception.params, {
             'value': '{a: 1}',
         })
+
+
+class TestModel(Model):
+    """A model with a JSONField for testing."""
+    field = JSONField()
+
+
+class JSONFieldModelTests(TestModelsLoaderMixin, TestCase):
+    """Tests for JSONField that use models saved to a database."""
+
+    tests_app = 'djblets.db.tests'
+
+    def test_first_save_with_literal(self):
+        """Testing JSONField on first save with object literal"""
+        model = TestModel(field={
+            'foo': 'bar',
+        })
+        model.save()
