Oops, I hadn&#39;t meant to push that to the main repository without consulting anyone.  Hope this change is okay, it seemed weird for read-json to error instead of producing eof.<br><br clear="all">Carl Eastlund<br><br><div class="gmail_quote">

On Tue, Oct 2, 2012 at 1:46 PM,  <span dir="ltr">&lt;<a href="mailto:cce@racket-lang.org" target="_blank">cce@racket-lang.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

cce has updated `master&#39; from 937c901ce7 to bc681836bc.<br>
  <a href="http://git.racket-lang.org/plt/937c901ce7..bc681836bc" target="_blank">http://git.racket-lang.org/plt/937c901ce7..bc681836bc</a><br>
<br>
=====[ One Commit ]=====================================================<br>
Directory summary:<br>
  40.0% collects/json/tests/<br>
  60.0% collects/json/<br>
<br>
~~~~~~~~~~<br>
<br>
bc68183 Carl Eastlund &lt;<a href="mailto:cce@racket-lang.org">cce@racket-lang.org</a>&gt; 2012-10-02 12:01<br>
:<br>
| Updating read-json to produce eof when appropriate.<br>
:<br>
  M collects/json/json.scrbl     | 5 +++--<br>
  M collects/json/main.rkt       | 5 +++--<br>
  M collects/json/tests/json.rkt | 7 +++++++<br>
<br>
=====[ Overall Diff ]===================================================<br>
<br>
collects/json/json.scrbl<br>
~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/json/json.scrbl<br>
+++ NEW/collects/json/json.scrbl<br>
@@ -79,9 +79,10 @@ the @rfc for more information about JSON.<br>
<br>
 @defproc[(read-json [in input-port? (current-input-port)]<br>
                     [#:null jsnull any? (json-null)])<br>
-         jsexpr?]{<br>
+         (or/c jsexpr? eof-object?)]{<br>
   Reads a @tech{jsexpr} from a JSON-encoded input port @racket[in] as a<br>
-  Racket (immutable) value.}<br>
+  Racket (immutable) value, or produces @racket[eof] if only whitespace<br>
+  remains.}<br>
<br>
 @defproc[(string-&gt;jsexpr [str string?] [#:null jsnull any? (json-null)])<br>
          jsexpr?]{<br>
<br>
collects/json/main.rkt<br>
~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/json/main.rkt<br>
+++ NEW/collects/json/main.rkt<br>
@@ -156,7 +156,7 @@<br>
       (list (string-&gt;symbol k) (read-json)))<br>
     (apply hasheq (apply append (read-list &#39;object #rx#&quot;^}&quot; read-pair))))<br>
   ;;<br>
-  (define (read-json)<br>
+  (define (read-json #:eof-ok? [eof-ok? #false])<br>
     (skip-whitespace)<br>
     (cond<br>
       [(regexp-try-match #px#&quot;^true\\b&quot;  i) #t]<br>
@@ -171,9 +171,10 @@<br>
               (cond [(equal? m #&quot;\&quot;&quot;) (read-string)]<br>
                     [(equal? m #&quot;[&quot;)  (read-list &#39;array #rx#&quot;^\\]&quot; read-json)]<br>
                     [(equal? m #&quot;{&quot;)  (read-hash)])))]<br>
+      [(and eof-ok? (regexp-try-match #px#&quot;$&quot; i)) eof]<br>
       [else (err &quot;bad input&quot;)]))<br>
   ;;<br>
-  (read-json))<br>
+  (read-json #:eof-ok? #true))<br>
<br>
 ;; ----------------------------------------------------------------------------<br>
 ;; Convenience functions<br>
<br>
collects/json/tests/json.rkt<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/json/tests/json.rkt<br>
+++ NEW/collects/json/tests/json.rkt<br>
@@ -95,6 +95,13 @@<br>
         (string-&gt;jsexpr @T{ &quot; \b\n\r\f\t\\\&quot;\/ &quot; }) =&gt; &quot; \b\n\r\f\t\\\&quot;/ &quot;<br>
         (string-&gt;jsexpr @T{ &quot;\uD834\uDD1E&quot; }) =&gt; &quot;\U1D11E&quot;<br>
         (string-&gt;jsexpr @T{ &quot;\ud834\udd1e&quot; }) =&gt; &quot;\U1d11e&quot;<br>
+        ;; EOF detection<br>
+        (for/list ([je (in-port read-json<br>
+                                (open-input-string<br>
+                                  @T{ 1 [2,3] &quot;four&quot; }))])<br>
+          je)<br>
+        =&gt;<br>
+        &#39;(1 (2 3) &quot;four&quot;)<br>
         ))<br>
<br>
 (test do (pred-tests)<br>
<br>
</blockquote></div><br>