Herby Vojčík wrote:
Getter is imperative, it may be lot harder to make it safe; and its
semantics would differ whether used in JSON / in eval (can lead to nasty
long-hidden bugs). Path is declarative (and fails fast in eval).

If one would want to make it more code-like, then something should be
devised which has the same meaning in code as well as in JSON. Like:

{
x:{
a:{
obj:[]
},
b: [-1].a
}
}

where [n] is reserved form (other may be used) to contain stack of
Prefix it with some reserved word, like 'circular', otherwise it is simply array literal (I've got a stupid day today)...
Like this:
{
  x:{
    a:{
      obj:[]
    },
    b: circular[-1].a
  }
}

nested currently defined literals in the actual lexical scope, possible
to index by positive (absolute) as well as negative (relative); so it
could also be [0].x.a or [1].a (geez, it can be made even generally to
access all nested lexical scopes, to access its local variables if it is
code; but then possibly only negative index would be permitted..., it is
hard to define where positive should start, at file level, probably).

gaz Heyes wrote:
Wouldn't it be easier to extend JSON to support a getter with a function
that refers to "this"?

o={a:123, get b(){return this.a}};o.b

On 5 March 2012 10:50, 程劭非 <[email protected]
<mailto:[email protected]>> wrote:

Hi, everyone,

As you know, JSON API will throw a syntax error when trying to
stringify a object with circular reference.But indeed the feature
"serializing/unserializing object with circular reference" is
needed.(eg. when storing a graph,or status machine)

I am working on a JS implement of parse/stringify to support a “path
grammar” in JSON. It looks like the following:
--------------------------------
// this will produce a object with it's property “x” reference to it
self
{
x:path(/)
}
--------------------------------
//also relative path is supported
{
x:{
a:path(../x),
b:path(x)
}
}
--------------------------------
//ref to deeper object
{
x:{
a:{
obj:[]
},
b:path(/x/a/obj)
}
}
--------------------------------
// path could also point to a none-object value
{
a:11,
b:path(/a)
}
--------------------------------
// path ref to a path node will get undefined, there is no way
to recurse
{
a:path(/), //the root object
b:path(/a) //undefined
}
----------------------------------

( The project is located at
https://github.com/wintercn/JSONplus. in which JSON.pareseEx and
JSON.stringifyEx passes all test262 API cases except the ones related
to circular reference. )


I was wondering if the future version of ECMAScript could support
this grammar or something like this to
enable serializing/unserializing object with circular reference. It
will be a good news for ones working on complex data structure.

PS. Another known way of descripting object with circular reference
is using sharp variable
<https://developer.mozilla.org/en/Sharp_variables_in_JavaScript> in
object literal . But there are several problems:
1. The id in sharp variable has to be unique. Combining two objects
with conflicted ids will be hard work.
2. Sharp variable is sensitive to the order of object properties. A
assignment must appear before its first usage. But path do not have
such requirement.Since the order of properties defined in JSON would
(especially) affect enumerate (for.. in) order, making a
order-independent reference grammar is a must.
3. Sharp variable requires assignment operator, and hence assignment
expression and even continuous assignment expression. Adding this
feature to JSON increases the complexity of its grammar a lot.




Thanks,
Shaofei Cheng


_______________________________________________
es-discuss mailing list
[email protected] <mailto:[email protected]>
https://mail.mozilla.org/listinfo/es-discuss



------------------------------------------------------------------------

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to