请问 python 有没有类似 java 的 gson 库?

2015-12-21 21:09:14 +08:00
 ciki
公司后台是 python 开发,客户端是 gson 解析的,有时候后端不能理解 gson 的作用,导致接口设计的 json 数据和客户端的需求有出入。
6153 次点击
所在节点    Python
16 条回复
linnchord
2015-12-21 21:36:25 +08:00
py2.6 以上内置 simplejson https://pypi.python.org/pypi/simplejson/
xufang
2015-12-21 21:41:47 +08:00
没啥好办法,如果客户端不改的话,你只能去适配它们。

适配的办法,参见 http://www.yilmazhuseyin.com/blog/dev/advanced_json_manipulation_with_python/
mengzhuo
2015-12-21 21:59:05 +08:00
LZ 还是太年轻了
都用 json 做数据格式了,两边协调下 model 就好了嘛。
klesh
2015-12-21 22:01:33 +08:00
3 楼, gson 是 java 的 json 库。
saberlion
2015-12-21 22:21:54 +08:00
自己的服务器是 flask ,安卓用 gson ,没啥问题啊
ciki
2015-12-22 10:04:44 +08:00
因为服务器开发对 model 的理解感觉不够,然后我这边需要对各种 model 封装,他那边没有对所有的 json 进行 model 处理的概念,所以我这边的 model 封装就各种匹配不上
ciki
2015-12-22 10:04:52 +08:00
我是客户端
ciki
2015-12-22 10:07:11 +08:00
每次返回的 json 格式都不一样,让人怎么封装
klesh
2015-12-22 11:33:15 +08:00
我感觉你的问题跟 json 无关
你的意思是服务器返回的 schema 每次不一样?但这个假设也比较离奇!没什么道理要这样做
楼主贴下实例看下?
ciki
2015-12-22 11:40:59 +08:00
可能是表达有问题,不是每次请求不一样,是整体上,封装的概念不够。这个接口返回的这样,那个接口返回的结构可能又不一样了。导致我的封装就太过于碎片化
jjx
2015-12-22 14:14:13 +08:00
不同的方法肯定返回的结果不一样的, 举个例子, 10 个报表个个返回字段都是不同的, 强求相同对后端有害, 怎么处理是你的事情, 这怪不到后端
mengzhuo
2015-12-22 15:06:12 +08:00
@klesh

我知道啊
但是本质还是 json
klesh
2015-12-22 15:42:20 +08:00
@mengzhuo 嗯,理解错了, SORRY 。
@ciki 有实例好些,你这样讲我理解起来是没问题的。就算同一个 Model ,不同接口返回不同的字段也是正常的,比如说 getList 和 getDetail ,出于速度的考量,返回不同的字段是合理的设定。
ciki
2015-12-22 15:56:51 +08:00
@klesh 不是字段的问题,是需要封装的问题,比如{user{}} 那么这个 user 字段的多少无关,关机是所有的数据都要保持这种结构,再比如{xxx{[],[]}}这类,那么至少要保证每个[]里面的数据具有一致性,如果不是一致性,需要有明确的字段告诉你区分。
klesh
2015-12-22 22:43:11 +08:00
封装( Encapsulation )是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

我猜测你讲的结构是 DTD ,你的意思是这个 user 字段可能存在也不可能不存在?
如果是这样也是正常的,毕竟指定 id 的 user 可能不在存在。可以通过 Result 下在包一个 User user 去配合。

```
class Result {
public User user;

public User getUser() { return user; }
}
```

[]中的数据一致性是指什么?长度一致?类型一致?内容一致?
ciki
2015-12-23 12:54:21 +08:00
@klesh 我的意思是所有 user 相关的字段都应该只存在 user{}这个结构里面,而不是 user 里面有几个,外面有几个。这只是一个简单的例子。整体来说,应该所有的设计都应该是 pojo 的概念,也就是定义好一个后,以后最多只是基于它的继承扩展,而不应该是又创建一个新的结构.

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

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

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

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

© 2021 V2EX