From 26fb28124b965e55b7d1e970a163ffc12b7573b0 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Wed, 24 Nov 2010 21:53:52 -0800 Subject: [PATCH] add tlrobinson's json-diff --- json-diff/closed.png | Bin 0 -> 3940 bytes json-diff/index.html | 245 ++++++++++++++++++++++++++++++++++++++++ json-diff/json-diff.css | 73 ++++++++++++ json-diff/open.png | Bin 0 -> 3940 bytes 4 files changed, 318 insertions(+) create mode 100644 json-diff/closed.png create mode 100644 json-diff/index.html create mode 100644 json-diff/json-diff.css create mode 100644 json-diff/open.png diff --git a/json-diff/closed.png b/json-diff/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..147c71722d03592a2b949191aa28e6ac56d85a37 GIT binary patch literal 3940 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 + + JSON Diff + + + + + +

Courtesy of tlrobinson. +
+ This version differs in that it supports null values,
+ downplays the significance of changed properties with the key key,
+ and provides links to jump from one change to the next.

+ +

JSON Diff

+
+
    +
  • Paste some JSON in each of the text fields. Click "Compare" to see the diff.
  • +
  • Changed portions are displayed in yellow. Additions are displayed in green. Deletions are displayed in red.
  • +
  • It also works as a JSON viewer. Click the disclosure triangles to display/hide portions of the JSON.
  • +
  • Invalid JSON is indicated by the text fields turning red.
  • +
  • Swap the contents of the text areas by clicking "Swap". Clear them by clicking "Clear".
  • +
+
+
+ + + + + +
+ +
+
+
+

About

+

JSON Diff is a simple way to visualize and compare JSON.

+

Known Issues

+
    +
  • Diff algorithm not very intelligent when dealing with arrays
  • +
  • Probably doesn't work in IE
  • +
+
+ +
+
+

+ © 2006-2010 Thomas Robinson. Some rights reserved.

+ + + diff --git a/json-diff/json-diff.css b/json-diff/json-diff.css new file mode 100644 index 0000000..04dc054 --- /dev/null +++ b/json-diff/json-diff.css @@ -0,0 +1,73 @@ +body { + background-color: lightblue; +} + +#results li > span, #results ul > span { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + padding-right: 5px; + padding-left: 5px; +} + +#results li { + margin-top: 1px; + padding-left: 15px; +} +#results ul { + padding-left: 15px; + margin-left: -15px; + padding-top: 0px; + margin-top: 0px; + background: url(open.png) no-repeat 2px 5px; + list-style-type: none; +} +#results ul[closed="yes"] { + background: url(closed.png) no-repeat 2px 5px; +} +#results ul[closed="yes"] > * { + display: none; +} +#results ul[closed="yes"] > *:first-child { + display: block; +} +.typeName { + color: gray; +} +.changed { + background-color: #fcff7f; +} +.changed.key { + background-color: #eee; +} + +.added { + background-color: #8bff7f; +} +.removed { + background-color: #fd7f7f; +} + +textarea { + width: 49%; + height: 200px; +} + +.contentbox { + border: 1px dashed black; + background-color: white; + padding: 15px; + margin: 10px; +} + +h2 { + text-align: center; + margin: 0px;; +} + +#results { + padding-left: 40px; +} + +#inputs { + text-align: center; +} \ No newline at end of file diff --git a/json-diff/open.png b/json-diff/open.png new file mode 100644 index 0000000000000000000000000000000000000000..1d48c6a2e6b23555c911403aee2eae5e87d2d486 GIT binary patch literal 3940 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