Skip to content

Commit 33e0a59

Browse files
committed
Handle missing JSON keys, refs #13
1 parent 83d3c1c commit 33e0a59

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

csv_diff/__init__.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,26 @@ def load_csv(fp, key=None, dialect=None):
2929
def load_json(fp, key=None):
3030
raw_list = json.load(fp)
3131
assert isinstance(raw_list, list)
32+
common_keys = set()
33+
for item in raw_list:
34+
common_keys.update(item.keys())
3235
if key:
3336
keyfn = lambda r: r[key]
3437
else:
3538
keyfn = lambda r: hashlib.sha1(
3639
json.dumps(r, sort_keys=True).encode("utf8")
3740
).hexdigest()
38-
return {keyfn(r): _simplify_json_row(r) for r in raw_list}
41+
return {keyfn(r): _simplify_json_row(r, common_keys) for r in raw_list}
3942

4043

41-
def _simplify_json_row(r):
44+
def _simplify_json_row(r, common_keys):
4245
# Convert list/dict values into JSON serialized strings
4346
for key, value in r.items():
4447
if isinstance(value, (dict, tuple, list)):
4548
r[key] = json.dumps(value)
49+
for key in common_keys:
50+
if key not in r:
51+
r[key] = None
4652
return r
4753

4854

tests/test_cli.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def json_files(tmpdir):
2323
one.write(
2424
json.dumps(
2525
[
26-
{"id": 1, "name": "Cleo", "nested": {"foo": 3}},
26+
{"id": 1, "name": "Cleo", "nested": {"foo": 3}, "extra": 1},
2727
{"id": 2, "name": "Pancakes", "nested": {"foo": 3}},
2828
]
2929
)
@@ -32,8 +32,8 @@ def json_files(tmpdir):
3232
two.write(
3333
json.dumps(
3434
[
35-
{"id": 1, "name": "Cleo", "nested": {"foo": 3, "bar": 5}},
36-
{"id": 2, "name": "Pancakes!", "nested": {"foo": 3}},
35+
{"id": 1, "name": "Cleo", "nested": {"foo": 3, "bar": 5}, "extra": 1},
36+
{"id": 2, "name": "Pancakes!", "nested": {"foo": 3}, "extra": 1},
3737
]
3838
)
3939
)
@@ -139,7 +139,10 @@ def test_json_files(json_files):
139139
"removed": [],
140140
"changed": [
141141
{"key": 1, "changes": {"nested": ['{"foo": 3}', '{"foo": 3, "bar": 5}']}},
142-
{"key": 2, "changes": {"name": ["Pancakes", "Pancakes!"]}},
142+
{
143+
"key": 2,
144+
"changes": {"name": ["Pancakes", "Pancakes!"], "extra": [None, 1]},
145+
},
143146
],
144147
"columns_added": [],
145148
"columns_removed": [],

0 commit comments

Comments
 (0)