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

JSONObject通过下标获取对应的值 #3135

Open
lilanlong opened this issue Oct 25, 2024 · 4 comments
Open

JSONObject通过下标获取对应的值 #3135

lilanlong opened this issue Oct 25, 2024 · 4 comments
Labels
enhancement New feature or request

Comments

@lilanlong
Copy link
Contributor

lilanlong commented Oct 25, 2024

请描述您的需求或者改进建议

现在JSONObject是继承LinkedHashMap实现的,是有序的,我想通过下标来获取JSONObject中的值。

请描述你建议的实现方案

现在Map中的key是通过Set存储的,无法通过下标获取key,进而获得相应的值,我想在JSONObject类中增加ArrayList来维护Map的key,在增加或者删除值的时候,都来更新这个ArrayList,这样就很容易实现通过下标获取对应的值了,不知道是否可行。

描述您考虑过的替代方案

对您考虑过的任何替代解决方案或功能的描述。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

@lilanlong lilanlong added the enhancement New feature or request label Oct 25, 2024
@wenshao
Copy link
Member

wenshao commented Oct 28, 2024

为什么有这个需求?java.util.LinkedHashMap也不会提供下标获取值的接口

@lilanlong
Copy link
Contributor Author

是的,LinkedHashMap的确没有提供,只是在工作开发过程中,有些SQL非常复杂,公司也没有定义实体来接收SQL查询返回的值,而是用JSONObject直接接收了,SQL中的别名也没有规律,反而通过下标取值更加方便,当然我们可以通过keySet来找到与下标的关系,但是性能上损耗的比较多。

@CodePlayer
Copy link
Contributor

你如果喜欢通过下标取值,为啥要用 Map 来接收呢 ?直接用 Object[] 数组就可以呀。

即使 LinkedHashMap 是有序的,但它的 底层实现 和 纯数组 完全是两码事。

即使你不想自己处理,担心性能损耗,但是技术实现是没有完全的黑魔法的,你这里不实现,就必定要别人那里去实现,底层也需要维护两套数据结构的元数据,才能同时支持两种取值方式。这样和你自己实现所产生的性能开销是没有什么差别的。

而且为了提供这个支持,就必须内置到 JSONObecjt 里面,哪怕别人没有你这个小众需求,也会因此受到负面的性能影响(因为 JSONObecjt 底层还是要维护两套数据结构元数据)。

@lilanlong
Copy link
Contributor Author

是的,在我提这个建议之前,我也想过你说的这些问题,最后想想还是提一下吧,如果对fastjson有意义,就进行实现,没有意义忽略即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants