diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py
--- a/django/core/management/commands/dumpdata.py
+++ b/django/core/management/commands/dumpdata.py
@@ -1,7 +1,7 @@
 from django.core.exceptions import ImproperlyConfigured
 from django.core.management.base import BaseCommand, CommandError
 from django.core import serializers
-from django.db import connections, router, DEFAULT_DB_ALIAS
+from django.db import router, DEFAULT_DB_ALIAS
 from django.utils.datastructures import SortedDict
 
 from optparse import make_option
@@ -28,13 +28,12 @@
     args = '[appname appname.ModelName ...]'
 
     def handle(self, *app_labels, **options):
-        from django.db.models import get_app, get_apps, get_models, get_model
+        from django.db.models import get_app, get_apps, get_model
 
-        format = options.get('format','json')
-        indent = options.get('indent',None)
+        format = options.get('format', 'json')
+        indent = options.get('indent', None)
         using = options.get('database', DEFAULT_DB_ALIAS)
-        connection = connections[using]
-        excludes = options.get('exclude',[])
+        excludes = options.get('exclude', [])
         show_traceback = options.get('traceback', False)
         use_natural_keys = options.get('use_natural_keys', False)
         use_base_manager = options.get('use_base_manager', False)
@@ -98,20 +97,23 @@
         except KeyError:
             raise CommandError("Unknown serialization format: %s" % format)
 
-        # Now collate the objects to be serialized.
-        objects = []
-        for model in sort_dependencies(app_list.items()):
-            if model in excluded_models:
-                continue
-            if not model._meta.proxy and router.allow_syncdb(using, model):
-                if use_base_manager:
-                    objects.extend(model._base_manager.using(using).all())
-                else:
-                    objects.extend(model._default_manager.using(using).all())
+        def get_objects():
+            # Collate the objects to be serialized.
+            for model in sort_dependencies(app_list.items()):
+                if model in excluded_models:
+                    continue
+                if not model._meta.proxy and router.allow_syncdb(using, model):
+                    if use_base_manager:
+                        objects = model._base_manager
+                    else:
+                        objects = model._default_manager
+                    for obj in objects.using(using).\
+                            order_by(model._meta.pk.name).iterator():
+                        yield obj
 
         try:
-            return serializers.serialize(format, objects, indent=indent,
-                        use_natural_keys=use_natural_keys)
+            return serializers.serialize(format, get_objects(), indent=indent,
+                    use_natural_keys=use_natural_keys)
         except Exception, e:
             if show_traceback:
                 raise
diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py
--- a/django/core/serializers/base.py
+++ b/django/core/serializers/base.py
@@ -40,6 +40,7 @@
         self.use_natural_keys = options.pop("use_natural_keys", False)
 
         self.start_serialization()
+        self.first = True
         for obj in queryset:
             self.start_object(obj)
             for field in obj._meta.local_fields:
@@ -55,6 +56,8 @@
                     if self.selected_fields is None or field.attname in self.selected_fields:
                         self.handle_m2m_field(obj, field)
             self.end_object(obj)
+            if self.first:
+                self.first = False
         self.end_serialization()
         return self.getvalue()
 
diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py
--- a/django/core/serializers/json.py
+++ b/django/core/serializers/json.py
@@ -17,10 +17,35 @@
     """
     internal_use_only = False
 
+    def start_serialization(self):
+        self._current = None
+        self.json_kwargs = self.options.copy()
+        self.json_kwargs.pop('stream', None)
+        self.json_kwargs.pop('fields', None)
+        self.stream.write("[")
+
     def end_serialization(self):
-        simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
+        if self.options.get("indent"):
+            self.stream.write("\n")
+        self.stream.write("]")
+        if self.options.get("indent"):
+            self.stream.write("\n")
+
+    def end_object(self, obj):
+        # self._current has the field data
+        indent = self.options.get("indent")
+        if not self.first:
+            self.stream.write(",")
+            if not indent:
+                self.stream.write(" ")
+        if indent:
+            self.stream.write("\n")
+        simplejson.dump(self.get_dump_object(obj), self.stream,
+                        cls=DjangoJSONEncoder, **self.json_kwargs)
+        self._current = None
 
     def getvalue(self):
+        # overwrite PythonSerializer.getvalue() with base Serializer.getvalue()
         if callable(getattr(self.stream, 'getvalue', None)):
             return self.stream.getvalue()
 
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -27,13 +27,16 @@
         self._current = {}
 
     def end_object(self, obj):
-        self.objects.append({
-            "model"  : smart_unicode(obj._meta),
-            "pk"     : smart_unicode(obj._get_pk_val(), strings_only=True),
-            "fields" : self._current
-        })
+        self.objects.append(self.get_dump_object(obj))
         self._current = None
 
+    def get_dump_object(self, obj):
+        return {
+            "pk": smart_unicode(obj._get_pk_val(), strings_only=True),
+            "model": smart_unicode(obj._meta),
+            "fields": self._current
+        }
+
     def handle_field(self, obj, field):
         value = field._get_val_from_obj(obj)
         # Protected types (i.e., primitives like None, numbers, dates,
