Bug#888112: diffoscope: compare JSON files using Python jsondiff module
Mattia Rizzolo
mattia at debian.org
Tue Jan 23 14:48:48 UTC 2018
On Tue, Jan 23, 2018 at 09:41:18PM +0800, Paul Wise wrote:
> The Python jsondiff module allows comparing JSON files in a better way
> than just comparing the plain text like diffoscope currently does.
Actually, that's a problem.
Diffoscope has a json comparator, that works great, but it's failing for
your example:
> $ curl -s 'https://salsa.debian.org/api/v4/users/1' > 1
> $ curl -s 'https://salsa.debian.org/api/v4/users/2' > 2
mattia at warren /tmp % diffoscope --debug 1 2
2018-01-23 15:45:31 D: diffoscope.presenters.formats: Will generate the following formats: text
2018-01-23 15:45:31 D: diffoscope.main: Starting diffoscope 90
2018-01-23 15:45:31 D: diffoscope.locale: Normalising locale, timezone, etc.
2018-01-23 14:45:31 D: diffoscope.main: Starting comparison
2018-01-23 14:45:31 D: diffoscope.comparators: Loaded 63 comparator classes
2018-01-23 14:45:31 D: diffoscope.comparators.utils.specialize: Using TextFile for 1
2018-01-23 14:45:31 D: diffoscope.comparators.utils.specialize: Using TextFile for 2
2018-01-23 14:45:31 D: diffoscope.comparators.utils.compare: Comparing 1 (TextFile) and 2 (TextFile)
...
I.e. it's not recognizing them as json files.
If I simply rename them to 1.json and 2.json and run diffoscope on them:
mattia at warren /tmp % diffoscope --debug 1.json 2.json
2018-01-23 15:46:40 D: diffoscope.presenters.formats: Will generate the following formats: text
2018-01-23 15:46:40 D: diffoscope.main: Starting diffoscope 90
2018-01-23 15:46:40 D: diffoscope.locale: Normalising locale, timezone, etc.
2018-01-23 14:46:40 D: diffoscope.main: Starting comparison
2018-01-23 14:46:40 D: diffoscope.comparators: Loaded 63 comparator classes
2018-01-23 14:46:40 D: diffoscope.comparators.utils.specialize: Using JSONFile for 1.json
2018-01-23 14:46:40 D: diffoscope.comparators.utils.specialize: Using JSONFile for 2.json
2018-01-23 14:46:40 D: diffoscope.comparators.utils.compare: Comparing 1.json (JSONFile) and 2.json (JSONFile)
2018-01-23 14:46:40 D: diffoscope.comparators.utils.file: File.has_same_content: <<class 'abc.JSONFile'> 1.json> <<class 'abc.JSONFile'> 2.json>
2018-01-23 14:46:40 D: diffoscope.diff: Running diff -aU7 /tmp/tmpfpv5c6dm_diffoscope/fifo1 /tmp/tmpfpv5c6dm_diffoscope/fifo2
2018-01-23 14:46:40 D: diffoscope.diff: diff -aU7 /tmp/tmpfpv5c6dm_diffoscope/fifo1 /tmp/tmpfpv5c6dm_diffoscope/fifo2: returncode 1, parsed True
|##################################################################################################################################| 100% Time: 0:00:00
2018-01-23 14:46:40 D: diffoscope.presenters.formats: Generating 'text' output at '-'
--- 1.json
+++ 2.json
│ --- 1.json
├── +++ 2.json
│ @@ -1,16 +1,16 @@
│ {
│ - "avatar_url": "https://seccdn.libravatar.org/avatar/9a5dac7fca5fa69fcb4fa36b948ff766?s=80&d=identicon",
│ - "bio": "",
│ - "created_at": "2017-12-17T12:04:05.482Z",
│ - "id": 1,
│ + "avatar_url": "https://seccdn.libravatar.org/avatar/a0177f306e580e136af48558989f2782?s=80&d=identicon",
│ + "bio": null,
│ + "created_at": "2017-12-17T12:46:16.992Z",
│ + "id": 2,
│ "linkedin": "",
│ - "location": "",
│ - "name": "Administrator",
│ - "organization": "",
│ + "location": null,
│ + "name": "Paul Martin",
│ + "organization": null,
│ "skype": "",
│ "state": "active",
│ "twitter": "",
│ - "username": "root",
│ - "web_url": "https://salsa.debian.org/root",
│ + "username": "pm",
│ + "web_url": "https://salsa.debian.org/pm",
│ "website_url": ""
│ }
1 mattia at warren /tmp % :(
Which is arguably even much better than what you get from that jsondiff
command :)
FTR, it seems the only check used to decide whether a file is a json
file, is to look for a '.json' as a filename suffix (and I'm not sure we
can do much better without looking into the file, which is probably too
expensive a check).
--
regards,
Mattia Rizzolo
GPG Key: 66AE 2B4A FCCF 3F52 DA18 4D18 4B04 3FCD B944 4540 .''`.
more about me: https://mapreri.org : :' :
Launchpad user: https://launchpad.net/~mapreri `. `'`
Debian QA page: https://qa.debian.org/developer.php?login=mattia `-
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/reproducible-builds/attachments/20180123/66651be1/attachment.sig>
More information about the Reproducible-builds
mailing list