Navigation Menu

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JSON循环引用的序列化与反序列化, 以及EL支持 #120

Closed
juqkai opened this issue Nov 25, 2011 · 5 comments
Closed

JSON循环引用的序列化与反序列化, 以及EL支持 #120

juqkai opened this issue Nov 25, 2011 · 5 comments
Milestone

Comments

@juqkai
Copy link
Member

juqkai commented Nov 25, 2011

今天 @jay 蓝色幽默 突然给我说, 现在JSON不支持循环引用的序列化与反序列化, 但是这种情况很多时候都要用到. 有点问题.

当时讨论了一下, 感觉可以弄个对象引用符的形式, 然后跟EL进行整合, 通过EL来读取引用信息. 例子:

public class A {
    String name;
    B b;
}

public class B {
    String name;
    A a;
}

A a = new A();
        B b = new B();
        a.name = "testa";
        b.name = "testb";
        a.b = b;
        b.a = a;

Json.toJson(a)

生成:

{
   "name" :"testa",
   "b" :{
      "name" :"testb",
      "a" :${root}
   }
}

其中root是一个root.abc.bcd形式的路径. 同时通过这样的整合, 可以使JSON完全支持EL表达式.

@juqkai
Copy link
Member Author

juqkai commented Nov 25, 2011

我已经提交了一个基本可用的分支: jsonRecursionQuoted

但是有点问题:
如果有N个属性都指向C对象的一个实例,
那么, 只有第一个属性是C对象的序列化.
后面的全是对象引用符...

求讨论, 求方案...

@zozoh
Copy link
Member

zozoh commented Nov 30, 2011

这个主要的考虑是 Nutz 的 JSON 是用来干什么的?

@jay 蓝色幽默 应用的场景我想应该是数据保存以及数据转换

而我认为 Nutz 的 JSON 最主要的场景应该是 AJAX 的应用,即, Nutz 的 JSON 转换出来的字符串可以直接被 JS

 var obj = eval("(" + json + ")")

而 JS 端的东东,也可以直接被 Nutz fromJson

如果变成

 "a" : ${root}

这样的形式,就意味着 当有互相引用时,JS 端拿到的东东一定是不工作的

所以,我认为我们仅仅有两个选项

1. 不支持,当有互相引用时,给 null (还是以前的解决方法)
2, 支持,但是不能用 ${root} ,而用    "a" : "$nutz.json::/xyz"

其中特殊字符串 "$nutz.json::" 表示,这个字符串为一个 JSON 的路径,我们用一个自己的简单方式来描述这个路径

/键值|#下标[/键值|#下标][/键值|#下标]...

比如

/abc/#8/yy      <- 表示跟下, abc 的键对应的值一定是个数组,下标为8(0 base) 的项目的 yy 键对应的值

这两种都是可以接受的,

"a" : ${root}   <- 因为不能被 Javascript 直接 eval,所以不能被接受

@juqkai
Copy link
Member Author

juqkai commented Dec 8, 2011

这个功能最近一两周可能没有时间弄, 天天加班, 太忙了

@zozoh
Copy link
Member

zozoh commented Dec 8, 2011

恩木有关系我已经加到 b.42 里了,b.42 春节前才发布

@juqkai
Copy link
Member Author

juqkai commented Feb 22, 2012

已提交,
使用规则:
"$nutz.json::EL"
其中EL按nutz el 的规则, 比如路径a.b[3].c, 或者简单的运行 1+3 等等

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants