Java 动态解析对象很难吗?

2020 年 2 月 16 日
 serge001

接口返回的是 json 对象,结构大致如下:

{ extra: { key1: value1, key2: value2 } }

extra 字段是固定的, 但是 key1 和 key2 是运营在后台配置的,安卓客户端拿到接口返回的对象后需要解析出来 key1 和 key2 上报到服务器, 但是安卓客户端同事说无法做这样的动态解析,或者很麻烦,解决方案就是固定 key1 和 key2,或者改变数据结构.

我是前端,这个对于 js 来说就是一个解构符的事情,为什么对于 java 来说这么难呢?

6747 次点击
所在节点    Java
38 条回复
ewBuyVmLZMZE
2020 年 2 月 16 日
这个不难的,这种结构,一个 Map 就解决了。

```java
@Data
public class JsonObject {
private Map<String, String> extra;
}

```
manami
2020 年 2 月 16 日
不难。可以先把 json 转 list,然后动态解析取值就很简单了
manami
2020 年 2 月 16 日
@manami 还是楼上转 map 方便……
SakuraOjosama
2020 年 2 月 16 日
倒是不难,无非就是这边遍历一下,
用 JSONObject 会容易点,用 Gson 的话就。。。
zy445566
2020 年 2 月 16 日
一个是裹脚布,一个是火葬场。五十笑一百了
zy445566
2020 年 2 月 16 日
如果 value1 和 value2 类型还不固定,Map 用个锤子
xxoolltt
2020 年 2 月 16 日
json ?
serge001
2020 年 2 月 16 日
@zy445566 类型固定为字符串
hhhsuan
2020 年 2 月 16 日
不管难不难,最好都别这么写,破坏了语义。
rockyou12
2020 年 2 月 16 日
会影响数据结构与 json 解析效率,但一般 map 就可以解决。实在不行还可以用 jackson 里的 jsonnode 这种 api,但固定字段才是比较好的做法
zzzmode
2020 年 2 月 16 日
解析没问题,考虑的是代码逻辑怎么上报,这种没法需要区分 key1 和 key2 的代表的含义
yiqunz
2020 年 2 月 16 日
楼主是不是没说明白什么叫 key1,key2 不固定
不固定能否枚举?还是 value 性质的 key ?
能枚举那是正常情况应该不会有这种疑问,估计是不能枚举?
value 性质的 key 这样设计我忍不了。。。如果 key 需要逻辑处理代码风格会不忍直视。。。

那么问题来了:为什么 key 不固定?能否固定?
jinhan13789991
2020 年 2 月 16 日
{ extra: [{ name:key1,value:value1 },{name:key2,value:value2} ]}
这样不香吗?
yiqunz
2020 年 2 月 16 日
https://study.congcong.us/t/629474
关于 json 风格的讨论 请查阅
luckylo
2020 年 2 月 16 日
归根结底。还是数据结构设计问题
binux
2020 年 2 月 16 日
归根结底。还是菜
mcfog
2020 年 2 月 16 日
这事情对 js 确实不难,可是楼主你自己好好想想,key1 key2 是动态的你怎么个用解构拿里面的值
sagaxu
2020 年 2 月 16 日
不难,但是脏啊,这样的接口得捏着鼻子调用
abcbuzhiming
2020 年 2 月 16 日
key 都不固定的? key 不固定我怎么知道你那个键代表啥意思?怎么会出现 key 都不固定的设计?
这是哪个设计的,键盘砸它脸上去
charlieputon
2020 年 2 月 16 日
心疼你们安卓,遇到你这样写接口的真是倒了霉了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/644933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX