<!--
RSS generated by JIRA (4.4#649-r158309) at Wed Jun 19 13:25:05 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=project+%3D+DJSON+ORDER+BY+status+DESC%2C+priority+DESC&tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>Clojure JIRA</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+DJSON+ORDER+BY+status+DESC%2C+priority+DESC</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="11" total="11"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[DJSON-1] Reflection warnings</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-1</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;The following reflection warnings are reported when using data.json - I was given the impression that &quot;standard&quot; (i.e., new contrib) libraries shouldn&apos;t have any:&lt;/p&gt;


&lt;p&gt;Reflection warning, clojure/data/json.clj:36 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:37 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:51 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:53 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:55 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:90 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:91 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:92 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:93 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:94 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:95 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:105 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:106 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:129 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:132 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:140 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:148 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:157 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:160 - call to equiv can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:278 - reference to field&lt;br/&gt;
isArray can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/data/json.clj:346 - reference to field&lt;br/&gt;
isArray can&apos;t be resolved.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14542">DJSON-1</key>
            <summary>Reflection warnings</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="seancorfield">Sean Corfield</reporter>
                        <labels>
                    </labels>
                <created>Thu, 28 Jul 2011 19:03:19 -0500</created>
                <updated>Fri, 14 Oct 2011 13:22:37 -0500</updated>
                    <resolved>Fri, 14 Oct 2011 13:22:37 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26978" author="stuart.sierra" created="Fri, 14 Oct 2011 13:22:37 -0500"  >&lt;p&gt;Fixed (for Clojure 1.3.0) in release 0.1.2 &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DJSON-2] Add support for encoding maps and sequences</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-2</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;Here is some trivial workaround code I&apos;ve been using:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn jsonable [o]
	(cond
		(map? o)
			(zipmap
				(keys o)
				(map jsonable (vals o)))
		(seq? o)
			(map jsonable o)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14673">DJSON-2</key>
            <summary>Add support for encoding maps and sequences</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tal.liron">Tal Liron</reporter>
                        <labels>
                    </labels>
                <created>Fri, 7 Oct 2011 14:16:54 -0500</created>
                <updated>Wed, 7 Mar 2012 07:59:48 -0600</updated>
                    <resolved>Wed, 7 Mar 2012 07:59:48 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26974" author="stuart.sierra" created="Fri, 14 Oct 2011 08:38:57 -0500"  >&lt;p&gt;I don&apos;t understand. Maps and sequences have always been supported:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (json-str {:a 1 :b 2})
&lt;span class=&quot;code-quote&quot;&gt;&quot;{\&quot;&lt;/span&gt;a\&lt;span class=&quot;code-quote&quot;&gt;&quot;:1,\&quot;&lt;/span&gt;b\&lt;span class=&quot;code-quote&quot;&gt;&quot;:2}&quot;&lt;/span&gt;
user=&amp;gt; (json-str (range 5))
&lt;span class=&quot;code-quote&quot;&gt;&quot;[0,1,2,3,4]&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-4] Please make function write-string public </title>
                <link>http://dev.clojure.org/jira/browse/DJSON-4</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;Please make function write-string in namespace clojure.data.json public, instead of private as it is now: for example, i&apos;m extending java.sql.Timestamp with JSONWriter protocol and i need to send ISO formatted timestamp value as string:&lt;/p&gt;

&lt;p&gt;(defn- write-timestamp &lt;span class=&quot;error&quot;&gt;&amp;#91;Timestamp out&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (write-string (convert-to-iso-time (.getTime Timestamp)) out))&lt;/p&gt;

&lt;p&gt;(extend java.sql.Timestamp js/JSONWriter {:-write write-timestamp})&lt;/p&gt;</description>
                <environment></environment>
            <key id="15765">DJSON-4</key>
            <summary>Please make function write-string public </summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="janherich">Jan Herich</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Mon, 22 Oct 2012 03:51:18 -0500</created>
                <updated>Sat, 27 Oct 2012 13:12:54 -0500</updated>
                    <resolved>Sat, 27 Oct 2012 13:12:54 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29829" author="stuart.sierra" created="Sat, 27 Oct 2012 13:12:54 -0500"  >&lt;p&gt;Declined. &apos;write-string&apos; is an implementation detail, not something I will commit to as a public API. Use the :value-fn option of &apos;write&apos; to handle extension to new types. Or copy the implementation of &apos;write-string&apos; into your namespace.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-6] Exception message in string reader says it is an array reader problem</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-6</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;The function read-quoted-string currently uses the same error message as read-array: &quot;JSON error (end-of-file inside array)&quot;.  Looks like copy and paste error to me.  Fix will be trivial IMHO.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15889">DJSON-6</key>
            <summary>Exception message in string reader says it is an array reader problem</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ska2342">Stefan Kamphausen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Dec 2012 05:19:47 -0600</created>
                <updated>Fri, 18 Jan 2013 08:57:53 -0600</updated>
                    <resolved>Fri, 18 Jan 2013 08:57:53 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30229" author="ska2342" created="Fri, 14 Dec 2012 05:26:24 -0600"  >&lt;p&gt;Trivial patch which changes the error message.&lt;/p&gt;</comment>
                    <comment id="30230" author="ska2342" created="Fri, 14 Dec 2012 05:53:15 -0600"  >&lt;p&gt;&lt;b&gt;incremental&lt;/b&gt; patch to add tests for detection of EOF in unterminated arrays and strings.  This diff is against HEAD~1, i.e. not against master and thus does not contain the fix itself.&lt;/p&gt;</comment>
                    <comment id="30451" author="stuart.sierra" created="Fri, 18 Jan 2013 08:57:53 -0600"  >&lt;p&gt;applied, with slight modifications&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11763" name="djson-6-patch.diff" size="909" author="ska2342" created="Fri, 14 Dec 2012 05:26:24 -0600" />
                    <attachment id="11764" name="djson-6-tests-patch.diff" size="1108" author="ska2342" created="Fri, 14 Dec 2012 05:53:15 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-3] Error writing strings with characters outside the BMP</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-3</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;This ticket filed as a follow on from pull request 2 at github&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;One of my users decided to start sending Emoji happy faces over a network protocol encoded using data.json, which caused it to promptly roll over and die. It turned out that write-json-string, while aware of the code point vs. character issue, was still iterating over a character count not a code point count.&lt;/p&gt;

&lt;p&gt;I have demonstrated the problem in a test, and fixed this: will file a patch when my contributor agreement is in place.&lt;/p&gt;</description>
                <environment>Clojure 1.2 and 1.3, Mac OS X, Java 1.6</environment>
            <key id="15078">DJSON-3</key>
            <summary>Error writing strings with characters outside the BMP</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="m@mattp.name">Matthew Phillips</reporter>
                        <labels>
                    </labels>
                <created>Fri, 16 Dec 2011 17:53:29 -0600</created>
                <updated>Fri, 9 Mar 2012 19:41:03 -0600</updated>
                    <resolved>Wed, 7 Mar 2012 07:58:48 -0600</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27510" author="m@mattp.name" created="Thu, 5 Jan 2012 17:57:36 -0600"  >&lt;p&gt;Patch to fix &lt;a href=&quot;http://dev.clojure.org/jira/browse/DJSON-3&quot; title=&quot;Error writing strings with characters outside the BMP&quot;&gt;&lt;del&gt;DJSON-3&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="27555" author="jafingerhut" created="Fri, 13 Jan 2012 01:29:35 -0600"  >&lt;p&gt;I&apos;m not an expert on JSON, so feel free to correct me if I am wrong, but it seems from reading RFC 4627 that strings in JSON, if they are encoded with the \uxxxx format for hex digits xxxx, should have their 16-bit UTF-16 code units encoded in that way.  There should always be exactly 4 hex digits after the \u.&lt;/p&gt;

&lt;p&gt;Here are a couple of test cases with the current code, without either of the patches fix_unicode_non_bmp.patch or fix_unicode_non_bmp_2.patch:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (in-ns &apos;clojure.data.json)&lt;br/&gt;
#&amp;lt;Namespace clojure.data.json&amp;gt;&lt;/p&gt;

&lt;p&gt;;; Incorrect.&lt;br/&gt;
clojure.data.json=&amp;gt; (map #(format &quot;%x&quot; (int %)) (json-str &quot;abc\ud834\udd1e&quot; :escape-unicode false))&lt;br/&gt;
(&quot;22&quot; &quot;61&quot; &quot;62&quot; &quot;63&quot; &quot;d834&quot; &quot;dd1e&quot; &quot;dd1e&quot; &quot;22&quot;)&lt;/p&gt;

&lt;p&gt;;; Also incorrect.&lt;br/&gt;
clojure.data.json=&amp;gt; (json-str &quot;abc\ud834\udd1e&quot;)&lt;br/&gt;
&quot;\&quot;abc\\u1d11e\\udd1e\&quot;&quot;&lt;/p&gt;


&lt;p&gt;Here is the behavior with patch fix_unicode_non_bmp.patch:&lt;/p&gt;

&lt;p&gt;; This is correct&lt;br/&gt;
clojure.data.json=&amp;gt; (map #(format &quot;%x&quot; (int %)) (json-str &quot;abc\ud834\udd1e&quot; :escape-unicode false))&lt;br/&gt;
(&quot;22&quot; &quot;61&quot; &quot;62&quot; &quot;63&quot; &quot;d834&quot; &quot;dd1e&quot; &quot;22&quot;)&lt;/p&gt;

&lt;p&gt;;; but this is not.  JSON specifies that UTF-16 code units should be&lt;br/&gt;
;; included in string in form \uxxxx, for hex encoding xxxx of 16-bit&lt;br/&gt;
;; code units.&lt;br/&gt;
clojure.data.json=&amp;gt; (json-str &quot;abc\ud834\udd1e&quot;)&lt;br/&gt;
&quot;\&quot;abc\\u1d11e\&quot;&quot;&lt;/p&gt;


&lt;p&gt;Here is the behavior with patch fix_unicode_non_bmp_2.patch:&lt;/p&gt;

&lt;p&gt;;; correct&lt;br/&gt;
clojure.data.json=&amp;gt; (map #(format &quot;%x&quot; (int %)) (json-str &quot;abc\ud834\udd1e&quot; :escape-unicode false))&lt;br/&gt;
(&quot;22&quot; &quot;61&quot; &quot;62&quot; &quot;63&quot; &quot;d834&quot; &quot;dd1e&quot; &quot;22&quot;)&lt;/p&gt;

&lt;p&gt;;; also correct.&lt;br/&gt;
clojure.data.json=&amp;gt; (json-str &quot;abc\ud834\udd1e&quot;)&lt;br/&gt;
&quot;\&quot;abc\\ud834\\udd1e\&quot;&quot;&lt;/p&gt;</comment>
                    <comment id="27562" author="jafingerhut" created="Fri, 13 Jan 2012 15:18:17 -0600"  >&lt;p&gt;fix_unicode_non_bmp_3.patch is same as fix_unicode_non_bmp_2.patch, except it includes the unit test Matthew Phillips had in his patch, plus another one to test the :escape-unicode true case.&lt;/p&gt;</comment>
                    <comment id="27782" author="jafingerhut" created="Mon, 20 Feb 2012 16:03:24 -0600"  >&lt;p&gt;Eventually I may even get the hang of this.  djson-3-non-bmp-chars-patch.txt contains patch in proper format.&lt;/p&gt;</comment>
                    <comment id="27909" author="stuart.sierra" created="Wed, 7 Mar 2012 07:58:48 -0600"  >&lt;p&gt;patch applied.&lt;/p&gt;</comment>
                    <comment id="27916" author="m@mattp.name" created="Thu, 8 Mar 2012 18:39:29 -0600"  >&lt;p&gt;Hi Stuart, it looks like you&apos;ve only applied Andy Fingerhut&apos;s last patch. My fix is in the first one: &quot;fix_unicode_non_bmp.patch&quot;&lt;/p&gt;</comment>
                    <comment id="27930" author="jafingerhut" created="Fri, 9 Mar 2012 11:04:25 -0600"  >&lt;p&gt;Matthew, did you see my comment from Jan 12, 2012?  I show a test case there that appears not to work with your patch, unless I am misunderstanding the correct JSON desired behavior.  That same test does work with my latest patch, I think.  Take a look and see what you think.&lt;/p&gt;</comment>
                    <comment id="27931" author="m@mattp.name" created="Fri, 9 Mar 2012 19:41:03 -0600"  >&lt;p&gt;Oh I see - I misunderstood what your were doing there, thinking it only applied to the escape-unicode == true case.&lt;/p&gt;

&lt;p&gt;And of course the Clojure string is already in UTF-16, so there&apos;s no reason to turn it into 32 bit code points and then expand it back to UTF-16 pairs.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10934" name="djson-3-non-bmp-chars-patch.txt" size="1700" author="jafingerhut" created="Mon, 20 Feb 2012 16:03:24 -0600" />
                    <attachment id="10771" name="fix_unicode_non_bmp_2.patch" size="524" author="jafingerhut" created="Fri, 13 Jan 2012 01:29:35 -0600" />
                    <attachment id="10775" name="fix_unicode_non_bmp_3.patch" size="1279" author="jafingerhut" created="Fri, 13 Jan 2012 15:18:17 -0600" />
                    <attachment id="10759" name="fix_unicode_non_bmp.patch" size="3731" author="m@mattp.name" created="Thu, 5 Jan 2012 17:57:36 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DJSON-5] data.json 0.2.0 must provide 0.1.x API compatibility layer</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-5</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;For libraries that rely on data.json the 0.2 release was a major unexpected breakage. For example, for&lt;br/&gt;
Monger to support 3 JSON serializers (Cheshire, c.d.j 0.1.x, c.d.j 0.2.x) we had to do this:&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojurewerkz/support/blob/master/src/clojure/clojurewerkz/support/json.clj&quot;&gt;https://github.com/clojurewerkz/support/blob/master/src/clojure/clojurewerkz/support/json.clj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is some of the craziest code I&apos;ve seen. While writing it, I realized that several changes&lt;br/&gt;
in the c.d.j. API were easy to shim with a backwards-compatibility function. clojure.data.json/json-str&lt;br/&gt;
can be implemented on top of the new function easily, for example.&lt;/p&gt;

&lt;p&gt;clojure.data.json demonstrates very questionable library maintenance practices and the 0.2 release&lt;br/&gt;
already cased a lot of confusion and pain to the community. There was 0 communication about the changes upfront, this shows lack of respect to the community and care about backwards compatibility.&lt;/p&gt;

&lt;p&gt;So, bringing back a shim API layer for 0.1.x compatibility is a must. There are many codebases on clojure.data.json 0.1.x and their developers probably are not going to stop doing what they are doing&lt;br/&gt;
and deal with unnecessary c.d.j. API changes. Other library maintainers that extend or depend on c.d.j.&lt;br/&gt;
are caught between a rock and a hard place.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15778">DJSON-5</key>
            <summary>data.json 0.2.0 must provide 0.1.x API compatibility layer</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Oct 2012 15:58:09 -0500</created>
                <updated>Sat, 27 Oct 2012 13:09:09 -0500</updated>
                    <resolved>Sat, 27 Oct 2012 13:09:09 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29796" author="michaelklishin" created="Wed, 24 Oct 2012 16:07:34 -0500"  >&lt;p&gt;According to clojuresphere.com, data.json is relied on by 340+ projects: &lt;a href=&quot;http://www.clojuresphere.com/org.clojure/data.json&quot;&gt;http://www.clojuresphere.com/org.clojure/data.json&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29797" author="timmc" created="Wed, 24 Oct 2012 16:11:20 -0500"  >&lt;p&gt;Alternative suggestion: Mark the library as &quot;under development/API subject to change&quot; while &amp;lt; v1.0.&lt;/p&gt;</comment>
                    <comment id="29798" author="michaelklishin" created="Wed, 24 Oct 2012 16:12:28 -0500"  >&lt;p&gt;@Tim McCormack: if a project is used by over 300 other projects and has been around for about a year, it is just lame to use excuses like that. It is too late, too many people already&lt;br/&gt;
use c.d.j.&lt;/p&gt;</comment>
                    <comment id="29828" author="stuart.sierra" created="Sat, 27 Oct 2012 13:09:09 -0500"  >&lt;p&gt;Old APIs restored, documented as &quot;DEPRECATED&quot;, in release 0.2.1.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-10] data.json does not AOT</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-10</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;When trying to AOT data.json I get the following exception:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;CompilerException java.lang.ClassNotFoundException: 
clojure.data.json.JSONWriter, compiling:(clojure/data/json.clj:279:1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I encountered this problem while looking into the possibility of AOTing the ClojureScript compiler to avoid startup time issues. ClojureScript now depends on data.json to help with source maps - so this was the first AOT hurdle I encountered.&lt;/p&gt;

&lt;p&gt;The exact steps I take to reproduce the bug:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;fresh checkout of ClojureScript&lt;/li&gt;
	&lt;li&gt;./script/bootstrap&lt;/li&gt;
	&lt;li&gt;mkdir classes&lt;/li&gt;
	&lt;li&gt;./script/repl&lt;/li&gt;
	&lt;li&gt;(compile &apos;clojure.data.json)&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="16170">DJSON-10</key>
            <summary>data.json does not AOT</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 29 Apr 2013 12:06:14 -0500</created>
                <updated>Mon, 29 Apr 2013 12:27:51 -0500</updated>
                    <resolved>Mon, 29 Apr 2013 12:27:51 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31022" author="dnolen" created="Mon, 29 Apr 2013 12:27:51 -0500"  >&lt;p&gt;Not a bug&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-7] Write-str outputs invalid JSON when key/value pairs are removed</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-7</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;When key/value pairs are removed by the function defined for :value-fn, commas are still output and this results in invalid JSON.  To remove the errant commas, I&apos;ve had to wrap write-str in (write-str (read-str ())).  &lt;/p&gt;

&lt;p&gt;Here is a simple example from the REPL:&lt;/p&gt;

&lt;p&gt;main=&amp;gt; (defn remove-nils &lt;span class=&quot;error&quot;&gt;&amp;#91;k v&amp;#93;&lt;/span&gt;&lt;br/&gt;
  #_=&amp;gt;   (if (nil? v)&lt;br/&gt;
  #_=&amp;gt;     remove-nils&lt;br/&gt;
  #_=&amp;gt;     v))&lt;/p&gt;

&lt;p&gt;main=&amp;gt; (def test&lt;br/&gt;
  #_=&amp;gt;   {:a nil,&lt;br/&gt;
  #_=&amp;gt;    :b nil,&lt;br/&gt;
  #_=&amp;gt;    :c 1,&lt;br/&gt;
  #_=&amp;gt;    :d nil,&lt;br/&gt;
  #_=&amp;gt;    :e 2&lt;br/&gt;
  #_=&amp;gt;    :f nil})&lt;/p&gt;

&lt;p&gt;main=&amp;gt; (json/write-str test :value-fn remove-nils)&lt;br/&gt;
;=&amp;gt;&quot;{,\&quot;c\&quot;:1,,,\&quot;e\&quot;:2,}&quot;&lt;/p&gt;

&lt;p&gt;main=&amp;gt; (json/write-str (json/read-str (json/write-str test :value-fn remove-nils)))&lt;br/&gt;
;=&amp;gt;&quot;{\&quot;c\&quot;:1,\&quot;e\&quot;:2}&quot;&lt;/p&gt;</description>
                <environment>clojure.data.json 0.2.0</environment>
            <key id="15952">DJSON-7</key>
            <summary>Write-str outputs invalid JSON when key/value pairs are removed</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="derfcat">Fred Caton</reporter>
                        <labels>
                    </labels>
                <created>Tue, 8 Jan 2013 10:05:43 -0600</created>
                <updated>Tue, 2 Apr 2013 19:05:10 -0500</updated>
                    <resolved>Tue, 2 Apr 2013 19:05:10 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30469" author="jafingerhut" created="Tue, 22 Jan 2013 00:29:59 -0600"  >&lt;p&gt;djson-7-dont-write-unnecessary-commas-v1.txt dated Jan 21 2013 modifies write-object so that it only writes out a comma if :value-fn does not cause the key/value pair to be omitted.&lt;/p&gt;</comment>
                    <comment id="30860" author="stuart.sierra" created="Tue, 2 Apr 2013 19:05:10 -0500"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11811" name="djson-7-dont-write-unnecessary-commas-v1.txt" size="2142" author="jafingerhut" created="Tue, 22 Jan 2013 00:29:59 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DJSON-8] write-json is documented to write to arg out, but instead writes to *out*</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-8</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;The summary pretty much says it all.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16114">DJSON-8</key>
            <summary>write-json is documented to write to arg out, but instead writes to *out*</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Wed, 27 Mar 2013 18:47:50 -0500</created>
                <updated>Tue, 2 Apr 2013 19:06:03 -0500</updated>
                    <resolved>Tue, 2 Apr 2013 19:06:03 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30826" author="jafingerhut" created="Wed, 27 Mar 2013 18:50:48 -0500"  >&lt;p&gt;Patch djson-8-correct-write-json-patch-v1.txt dated Mar 27 2013 is a simple one-line fix.&lt;/p&gt;</comment>
                    <comment id="30861" author="stuart.sierra" created="Tue, 2 Apr 2013 19:06:03 -0500"  >&lt;p&gt;Already fixed in commit d3cce5b200031cf22603c13a9a39e3939651d344&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11930" name="djson-8-correct-write-json-patch-v1.txt" size="882" author="jafingerhut" created="Wed, 27 Mar 2013 18:50:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-11] Commas still don&apos;t work properly in all cases for removed values via value-fn</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-11</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;DSON-7 fixes the problem with printing JSON with extra commas, but only as long as the last item is actually printable (the test doesn&apos;t appear to demonstrate this, but the keys are iterated in hash order, not insertion order). If the last item&apos;s no good, we still have a problem.&lt;/p&gt;

&lt;p&gt;The best way to handle this without trying to precalculate value-fn for the next value (in case it&apos;s not needed) is to insert the comma BEFORE we print the current value, but only if it&apos;s not the first thing to be printed.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16189">DJSON-11</key>
            <summary>Commas still don&apos;t work properly in all cases for removed values via value-fn</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jstoneham">John Stoneham</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 May 2013 21:21:08 -0500</created>
                <updated>Fri, 17 May 2013 08:33:47 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31097" author="jafingerhut" created="Fri, 17 May 2013 08:33:47 -0500"  >&lt;p&gt;Doh!  Patch djson-11-fix-comma-printing-patch-v1.txt dated May 17 2013 should really fix things, including changing the test to exhibit the problem (before this fix).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11993" name="djson-11-fix-comma-printing-patch-v1.txt" size="2627" author="jafingerhut" created="Fri, 17 May 2013 08:33:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DJSON-9] Always escape U+2028 and U+2029 to be nice to broken JSON parsers</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-9</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;U+2028 and U+2029 should be treated like \n and, viz, escaped even when &amp;#42;escape-unicode&amp;#42; is false.&lt;/p&gt;

&lt;p&gt;A number of JSON parsers (such as ExtJS&apos;s) think they can eval JSON in a JS runtime to decode it. This is not true, since JS does not allow U+2028 and U+2029 unescaped in strings:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://timelessrepo.com/json-isnt-a-javascript-subset&quot;&gt;http://timelessrepo.com/json-isnt-a-javascript-subset&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this is broken behavior, it is also quite common, so escaping these characters uniformly may ease some developer pain and surprise.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16168">DJSON-9</key>
            <summary>Always escape U+2028 and U+2029 to be nice to broken JSON parsers</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Apr 2013 21:45:46 -0500</created>
                <updated>Sun, 28 Apr 2013 21:46:10 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31017" author="timmc" created="Sun, 28 Apr 2013 21:46:10 -0500"  >&lt;p&gt;Attached patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11974" name="0001-Escape-JS-forbidden-unicode-chars-to-be-nice-to-brok.patch" size="2366" author="timmc" created="Sun, 28 Apr 2013 21:45:46 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>
</channel>
</rss>