<div dir="ltr"><div style>First off, thanks Carl and Danny for the code. The thing is, the system call to python works for our needs and is easier than rolling my own. The reason I started this thread in the first place is because it seems like outputting human-readable json is common and often desired (see the upvotes in the SO article in the second message for proof). Because it seems so common, I just assumed I was missing something. When I found out it was missing from the Racket json module, I thought it would be more complete with this functionality. I&#39;m now seeing that there are many different uses and desires and design choices that need to be made, so what functionality to provide isn&#39;t as clear as I thought (I&#39;m not sure what development process the other libraries went through for the human-readable option).</div>

<div style><br></div><div style>I still would like to see this functionality in the Racket json library, but since the Python thing works for now, my reasons are mainly to save face with my coworker and to avoid repeating this process if I ever think I need human-readable json in the future and want to use Racket. I also thought it might be cool to make a contribution, but seeing the code provided above, I&#39;m thinking I may not be as qualified as I thought.</div>

<div style><br></div><div style>My following responses should be taken in that context:</div><div style><br></div><div style>Eli Barzilay wrote:</div>&gt; <span style="font-family:arial,sans-serif;font-size:13px">If the goal is just diffing, then it makes things a little different:</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">&gt; you&#39;ll want newlines, and you won&#39;t care about indentation. </span><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div>

<span style="font-family:arial,sans-serif;font-size:13px">The goal is to have human-readable json mainly for the purpose of making diffing easier. Our data is a nested hierarchy, and I would argue that indentation makes it more readable by humans. I agree that it&#39;s not completely necessary for diffing, but it does help visualize hierarchy depth, which may be part of what&#39;s different.</span><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">&gt; But a </span><span style="font-family:arial,sans-serif;font-size:13px">better solution would be to find a diff tool that works on the line,</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">&gt; or even better a tree diff thing...</span><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div style>More specifically, this json file is part of project in a git repository, and we use gerrit (<a href="https://code.google.com/p/gerrit/">https://code.google.com/p/gerrit/</a>) for code reviews. Large one-line diffs are hard to make sense of, and gerrit only allows comments at the line level.</div>

</div><div style><br></div><div style>Danny Yoo wrote:</div><div style><span style="font-family:arial,sans-serif;font-size:13px">&gt; I think the point is: it should be very easy to do this; it&#39;s just a</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">&gt; matter of knowing what behavior you want.</span><br></div><div style><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div style>We used to have an Objective-C project with all the data hard-coded and written to json when we wanted, but I couldn&#39;t stand editing that beast any more, so I made a  Racket command-line tool to read in the json and process commands to edit it in ways we need. I would have just switched to a database, but the json representation is a sanity check to make sure I didn&#39;t do anything stupid (and also for others to verify that in gerrit), hence the need to have it human readable.<span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div style><br></div><div style>I assume we&#39;ll eventually go to some neat UI or web interface or something, but that probably won&#39;t happen for a while. I give you that context because I think it makes the desired behavior clearer than me trying to describe it, and it also gives you the chance to tell me what I should want.</div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 16, 2013 at 1:32 PM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org" target="_blank">eli@barzilay.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">That&#39;s not really relevant in this case: there is no problem here<br>
comparing the keys since they are all symbols.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
10 minutes ago, Danny Yoo wrote:<br>
&gt; Racket provides a generic order predicate: see data/order:<br>
&gt;<br>
&gt;      <a href="http://docs.racket-lang.org/data/Orders_and_Ordered_Dictionaries.html" target="_blank">http://docs.racket-lang.org/data/Orders_and_Ordered_Dictionaries.html</a><br>
&gt;<br>
&gt; For example,<br>
&gt;<br>
&gt;     <a href="https://gist.github.com/dyoo/5398549#file-pretty-print-json-rkt-L5" target="_blank">https://gist.github.com/dyoo/5398549#file-pretty-print-json-rkt-L5</a><br>
&gt;     <a href="https://gist.github.com/dyoo/5398549#file-pretty-print-json-rkt-L12" target="_blank">https://gist.github.com/dyoo/5398549#file-pretty-print-json-rkt-L12</a><br>
&gt;     <a href="https://gist.github.com/dyoo/5398549#file-pretty-print-json-rkt-L12" target="_blank">https://gist.github.com/dyoo/5398549#file-pretty-print-json-rkt-L12</a><br>
<br>
</div></div><div class="HOEnZb"><div class="h5">--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
</div></div></blockquote></div><br></div>