V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ciki
V2EX  ›  Python

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

  •  
  •   ciki · 2015-12-21 21:09:14 +08:00 · 6265 次点击
    这是一个创建于 3267 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司后台是 python 开发,客户端是 gson 解析的,有时候后端不能理解 gson 的作用,导致接口设计的 json 数据和客户端的需求有出入。
    16 条回复    2015-12-23 12:54:21 +08:00
    linnchord
        1
    linnchord  
       2015-12-21 21:36:25 +08:00
    py2.6 以上内置 simplejson https://pypi.python.org/pypi/simplejson/
    xufang
        2
    xufang  
       2015-12-21 21:41:47 +08:00
    没啥好办法,如果客户端不改的话,你只能去适配它们。

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

    我知道啊
    但是本质还是 json
    klesh
        13
    klesh  
       2015-12-22 15:42:20 +08:00
    @mengzhuo 嗯,理解错了, SORRY 。
    @ciki 有实例好些,你这样讲我理解起来是没问题的。就算同一个 Model ,不同接口返回不同的字段也是正常的,比如说 getList 和 getDetail ,出于速度的考量,返回不同的字段是合理的设定。
    ciki
        14
    ciki  
    OP
       2015-12-22 15:56:51 +08:00
    @klesh 不是字段的问题,是需要封装的问题,比如{user{}} 那么这个 user 字段的多少无关,关机是所有的数据都要保持这种结构,再比如{xxx{[],[]}}这类,那么至少要保证每个[]里面的数据具有一致性,如果不是一致性,需要有明确的字段告诉你区分。
    klesh
        15
    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
        16
    ciki  
    OP
       2015-12-23 12:54:21 +08:00
    @klesh 我的意思是所有 user 相关的字段都应该只存在 user{}这个结构里面,而不是 user 里面有几个,外面有几个。这只是一个简单的例子。整体来说,应该所有的设计都应该是 pojo 的概念,也就是定义好一个后,以后最多只是基于它的继承扩展,而不应该是又创建一个新的结构.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:10 · PVG 12:10 · LAX 20:10 · JFK 23:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.