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合并输出 #100

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

JSON合并输出 #100

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

Comments

@juqkai
Copy link
Member

juqkai commented Nov 4, 2011

在实现NutConfig的时候, 需要合并多个配置项, 所以, 觉得可以在 JSON 实现一个多个 JSON 串合并输出一个对象的功能.

如:

json A:
{name : "abc"}

json B:
{age: 12}

使用这个功能后等效于:

{name:"abc", age: 12}
@juqkai
Copy link
Member Author

juqkai commented Nov 4, 2011

功能我已经实现了, 不过, 是把它实现成ObjsMerge了, 即, 也Objs定义的中间结构为基础做合并.

转换器中间对象合并器
合并 Objs 中定义的中间结构.
规则:

普通对象, 保存为List, 但是要去掉重复.
合并 map , 如果 key 值相同, 那么后一个值覆盖前面的值.递归合并
list不做递归合并, 只做简单的合并, 清除重复的操作.

这个地方有点小问题需要 @zozoh @wendal确定一下.
这个功能要不要放入JSON中, 如果放入的话, 接口怎么设计? 主要有两种方案:

  1. 另外实现fromJsonMerge(String ... jsons)方法, 其参数是json可变数组, 这样的话, 要添加的方法有点多.
    2, 直接修改现有接口, 即将现有的fromJson(String json) 扩展成fromJson(String ... jsons). 使用上完全兼容原来的实现.

使用那种方案可能需要你们确定一下.

juqkai added a commit that referenced this issue Nov 4, 2011
@zozoh
Copy link
Member

zozoh commented Dec 7, 2011

呃 .......... Map.putAll 就可以了嘛,真的要为了省这么一行不是经常使用的调用代码,建立这个吗?

不过这个功能挺有意思的,如果要保留,最好把 ObjsMerge 里的代码放到 Objs 里,这样,调用者只需要知道 Objs 就是放一些对对象进行的高级操作。 不过最好这些都放到 Mirror 里 .... 我找时间想想 ......

@juqkai
Copy link
Member Author

juqkai commented Dec 8, 2011

JSON合并主要涉及MAP, LIST的合并, 还有一些深层次的合并, 如果只是单纯使用Map.putAll的话, 可能会导致很多信息丢失.
功能差不多实现了, 不过JSON的接口看是调整, 还是扩展

@zozoh
Copy link
Member

zozoh commented Dec 8, 2011

恩,这个代码先留着吧,因为 这个合并可以把一个POJO 和 Map 合并,应该蛮有用的,
我想了想到也每必要把 Objs 放到 Mirror 里,但是应该把 ObjsMerge 放到 Objs 里

@zozoh
Copy link
Member

zozoh commented Jan 5, 2012

相关修改 31e84d5

@zozoh zozoh closed this as completed Jan 5, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants