Igor,

I'm afraid that your notation is not very friendly to humans ... a computer can 
keep track of the key value pairs in the literal dictionary, but a human will 
fail very quickly...

The appeal of JSON (and STON) is that the output is readable by mere mortals:

  (JavaScript Object Notation) is a lightweight 
  data-interchange format. It is easy for humans to 
  read and write.

What we're missing from Smalltalk is a literal dictionary or literal map syntax 
... without that I'm afraid that for human friendly, lightweight notations we 
have to step away from the Smalltalk syntax - STON does this very nicely BTW...

Dale

----- Original Message -----
| From: "Igor Stasenko" <siguc...@gmail.com>
| To: "Pharo Development" <Pharo-project@lists.gforge.inria.fr>
| Sent: Friday, October 19, 2012 4:09:22 AM
| Subject: [Pharo-project] Yet another Notation format: Object literals
| 
| Hi,
| as i promised before, here the simple smalltalk-based literal format.
| It based on smalltalk syntax, and so, unlike JSON, it doesn't needs
| to
| have separate parser (a normal smalltalk parser used for that).
| 
| The idea is quite simple:
| you can tell any object to represent itself as an 'object literal' ,
| for example:
| 
| (1@3) asObjectLiteral
| -->  #(#Point 1 3)
| 
| { 1@2.  3@4. true. false . nil  } asObjectLiteral
| 
| -> #(#Array #(#Point 1 2) #(#Point 3 4) true false nil)
| 
| (Dictionary newFromPairs: { 1->#(1 2 3) . 'foo' -> 'bar' })
| asObjectLiteral
| ->
|  #(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar')
| 
| Next thing, you can 'pretty-print' it (kinda):
| 
| #(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar') printObjectLiteral
| 
|  '#(#Dictionary
|       1
|       (#Array 1 2 3)
|       ''foo'' ''bar'')'
| 
| 
| and sure thing, you can do reverse conversion:
| 
|  '#(#Dictionary
|       1
|       (#Array 1 2 3)
|       ''foo'' ''bar'')'  parseAsObjectLiteral
| 
|  a Dictionary('foo'->'bar' 1->#(1 2 3) )
| 
| Initially, i thought that it could be generic (by implementing
| default
| Object>>#asObjectLiteral),
| but then after discussing it with others, we decided to leave
| 
| Object>>#asObjectLiteral to be a subclass responsibility.
| So, potentially the format allows to represent any object(s) as
| literals, except from circular referencing objects, of course.
| 
| The implementation is fairly simple, as you may guess and contains no
| new classes, but just extension methods here and there.
| 
| Take it with grain and salt, since it is just a small proof of
| concept. (And if doing it for real it may need some changes etc).
| Since i am far from areas right now, where it can be used, i don't
| want to pursue it further or advocate if this is the right way to do
| things.
| Neither i having a public repository for this project..
| 
| So, if there anyone who willing to pick it up and pursue the idea
| further, please feel free to do so and make a public repository for
| project.
| 
| 
| --
| Best regards,
| Igor Stasenko.
| 

Reply via email to