Use OrderedDict to preserve order
diff --git a/.travis.yml b/.travis.yml
index 6a0aaa0..94b6262 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,7 +6,9 @@
- TOXENV=py34
- TOXENV=pypy
- TOXENV=pypy3
-install: pip install coveralls tox
+install:
+ - if [[ $TOXENV == py26 ]]; then pip install ordereddict; fi
+ - pip install coveralls tox
script: tox
# Special snowflake. Our tests depend on making real commits.
before_install:
diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py
index 1d601fa..ae6dfe8 100644
--- a/pre_commit_hooks/pretty_format_json.py
+++ b/pre_commit_hooks/pretty_format_json.py
@@ -3,13 +3,21 @@
import argparse
import sys
+# Versions older than Python 2.6 will need to install ordereddict,
+# but newer versions will import from the built-in collections module.
+try:
+ from collections import OrderedDict
+except ImportError:
+ from ordereddict import OrderedDict
+
import simplejson
-def _get_pretty_format(contents, indent, no_sort_keys):
+def _get_pretty_format(contents, indent, sort_keys=True):
return simplejson.dumps(
- simplejson.loads(contents),
- sort_keys=no_sort_keys,
+ simplejson.loads(contents,
+ object_pairs_hook=None if sort_keys else OrderedDict),
+ sort_keys=sort_keys,
indent=indent
) + "\n" # dumps don't end with a newline
@@ -39,7 +47,7 @@
action='store_true',
dest='no_sort_keys',
default=False,
- help='Do not sort the keys'
+ help='Keep JSON nodes in the same order'
)
parser.add_argument('filenames', nargs='*', help='Filenames to fix')