<div dir="ltr"><div><div><div><div>Nick,<br><br></div>I&#39;ve just built pretty-printing for JSON in a Gist you can see here:<br><br>  <a href="https://gist.github.com/carl-eastlund/5398440">https://gist.github.com/carl-eastlund/5398440</a><br>

<br></div>It&#39;s built on top of my own &quot;stylish printing&quot; library, mischief/stylish, that you can install by running:<br><br></div>  raco pkg install mischief<br><br></div>I&#39;ll add this to the mischief package soon, for now you can copy it from the Gist site and modify as needed.  I don&#39;t know if this indents things the best possible way, but hopefully it&#39;s a good start.<br>

<div class="gmail_extra"><br clear="all"><div>Carl Eastlund</div>
<br><div class="gmail_quote">On Tue, Apr 16, 2013 at 2:15 PM, Nick Shelley <span dir="ltr">&lt;<a href="mailto:nickmshelley@gmail.com" target="_blank">nickmshelley@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">I&#39;m pretty sure what I want is the easy thing. We have data represented as json, and we want changes to it to be easy to see in a difftool. Everything on one line makes this hard. We just have a bunch of nested arrays and dictionaries that need to be tabbed and newlined with no regard to width.<br>



<div><br></div><div>As far as order goes, I think Python alphabetizes the keys, but for our purposes, order isn&#39;t important as long as it&#39;s consistent (so we don&#39;t get diffs that just change the order).</div>



<div><br></div><div>I&#39;m willing to implement it, and I might enjoy learning the process of contributing with something as easy as this. But if someone else gets to it first because it&#39;s easier to just do it right the first time than rewrite mine, I wouldn&#39;t mind.</div>



<div><br></div><div>Thanks for the responses and sorry for my unclear initial question.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 16, 2013 at 12:05 PM, Sean McBeth <span dir="ltr">&lt;<a href="mailto:sean.mcbeth@gmail.com" target="_blank">sean.mcbeth@gmail.com</a>&gt;</span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I&#39;ve had good luck porting simple Python examples to Racket. Perhaps you could start with the Python code that works as you expect, port it to Racket, then refactor it to more Rackety ways:<div>



<a href="http://hg.python.org/cpython/file/cc0e72082e52/Lib/json" target="_blank">http://hg.python.org/cpython/file/cc0e72082e52/Lib/json</a><br>

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





</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div>Just now, Nick Shelley wrote:<br>
&gt; In talking with an experienced Racketeer, I realized that<br>
&gt; pretty-print has a specific meaning in Racket that takes width into<br>
&gt; account.<br>
<br>
</div>That&#39;s exactly what I thought you were talking about.  Doing it from<br>
scratch seems wrong, and I thought that the right way to do it is to<br>
hook into the pretty-printer that we already have.<br>
<div><br>
<br>
&gt; What I really want is json with properly placed newlines and tabs<br>
&gt; (or spaces).<br>
<br>
</div>This sounds somewhere between very easy (if all you want is<br>
newlines+indentation up to a specific level) to something more<br>
complicated if you want to control other aspects like spaces around<br>
colons, sort keys in tables, etc.<br>
<div><br>
<br>
&gt; I&#39;m willing to take a stab at it if it doesn&#39;t exist. I just wanted<br>
&gt; to make sure I wasn&#39;t missing it somewhere (which happens often with<br>
&gt; me).<br>
<br>
</div>If you can summarize the python-equivalent features in a rackety way,<br>
I can see if it&#39;s easy to add them to our printer.<br>
<br>
IIUC, this interface means that `write-json&#39; would get a bunch of<br>
additional keywords, but I&#39;m not sure about it, since in Racket<br>
`write&#39; usually refers to something closer to serializing a value in a<br>
readable way rather than printing it in a readable way.  So maybe the<br>
right thing is to add a `print-json&#39; function even if it duplicates<br>
the functionality of `write-json&#39;.<br>
</div></div><span><font color="#888888"><div><div><br>
--<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>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</font></span></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div><br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div></div>