Java 动态解析对象很难吗?

2020-02-16 09:00:12 +08:00
 serge001

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

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

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

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

5916 次点击
所在节点    Java
38 条回复
ewBuyVmLZMZE
2020-02-16 09:04:42 +08:00
这个不难的,这种结构,一个 Map 就解决了。

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

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

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

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

https://www.v2ex.com/t/644933

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

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

© 2021 V2EX