JSON?

Joe Armstrong (AL/EAB) joe.armstrong@REDACTED
Mon Nov 21 10:09:47 CET 2005


Re quoting and unquoting - I ran into this problem recently
so I have made two changes to the standard libraries (both changes will not break old code :-)

Change 1 - to io_lib.erl  print binaries containing strings as <<"abc">> as <<"abc">> and NOT
           <<97,98,99>>

	     I posted a (buggy) version of this earlier - but now it appears to be correct

Change 2 - erl_scan.erl.  Accept <<' ...   '>> as an alternative way of entering binaries containing      
           strings.

	  With this change I can write

	      func() ->
		   <<'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                  "http://www.w3.org/TR/html4/strict.dtd">
                  <html>
                  <head>
                  <meta http-equiv="Content-Type" 

			... dozens of lines with single and double quotes ...

		   '>>

	    '>> is the binary delimiter - And there is NO quoting convention *within* the body
          of the binary. So if you want to write '>> within the binary you can't (horrors)
	    (but who would want to anyway? - '>>)

<aside>

	I've also written a little parse transform. So that

	   foo() ->
		{'$template', <<'<h1>${title}</h1>
	                      <p>Written by: ${author} on ${date}
	                      ..
	                    '>>}

      Gets transformed into

		foo() -> [<<"<h1>">>,
			    "title",
			    <<"</h1>
			       <p>written by: ">>,
			    "author"
		          ...
			    ]

      Which is actually rather useful for mixing and embedding Erlang in HTML

</aside>

In my case a certain reluctance to using binaries has a lot to do with how they are printed and 
how they are inputted. The above two conventions make life a *lot* easier.

<aside>
I had pondered the

	<<#flunkYStuff# ... #flunkyStuff#>>

Convention (old Unix people will understand this :-) - so I could enter *any* text within the
body of the binary without quoting. So you could write:

	<<#glurk# to quote a binary use <<' ... '>> or use the
		    <<#flunkyStuff# ... #flunkyStuff#>> convention
	  #glurk#>>

Eureka - having written this down it actually looks less repulsive than I had imagined -
I shall add this tonight :-)

</aside>

 

 /Joe


	    


> -----Original Message-----
> From: Jim Larson [mailto:jim@REDACTED]
> Sent: den 17 november 2005 09:29
> To: Joe Armstrong (AL/EAB); Bob.Smart@REDACTED;
> erlang-questions@REDACTED
> Cc: jim@REDACTED
> Subject: Re: JSON? 
> 
> 
> I've recieved approval to release the JSON library for Erlang!
> I'll get it cleaned up and released tomorrow.
> 
> In message 
> <EF4121B4EBC4E045BDE1273F9D0A87FF011209AA@REDACTED
> se> Joe Armstrong writes:
> >
> >IMHO you might get a nicer mapping if you changed strings to 
> binaries.
> 
> I've pondered that.  It's a little awkward with the quoting and
> unquoting you need to do.  Binaries also imply that you'd need to
> choose a Unicode format for the internal representation that would
> be good for all applications.
> 
> 
> >I'd let the parser return an association list (not a dict) - 
> since (probably) 
> >the object is small
> >and it's nice to be able to print it and pattern match it directly.
> 
> Yeah - I'd be glad to trade the asymptotic efficiency of dicts for
> compactness and nicer printing.  I liked dicts until they started
> showing up in error reports.  I'll probably change this in a future
> release.
> 
> Pattern matching?  This means you'd have to:
> 
> 	* have the JSON decoder always sort the assoc-list;
> 	* remember to maintain your pattern assoc-list in sorted order;
> 	* have optional fields sort after mandatory fields.
> 
> Am I forgetting some new language feature?
> 
> Thanks for your thoughts!
> 
> Jim Larson
> jim@REDACTED
> 



More information about the erlang-questions mailing list