为什么别人家返回的 json 字符串是自带格式化效果的, 而我的就是一坨长串? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chineselittleboy
V2EX    问与答

为什么别人家返回的 json 字符串是自带格式化效果的, 而我的就是一坨长串?

  •  
  •   chineselittleboy 2016-06-27 10:45:17 +08:00 8211 次点击
    这是一个创建于 3417 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是别人家的:
    别人家的

    这是我家的:
    我家的

    45 条回复    2016-06-28 09:43:02 +08:00
    slixurd
        1
    slixurd  
       2016-06-27 10:53:16 +08:00   1
    很多 JSON 库都自带 beautify 参数
    justfly
        2
    justfly  
       2016-06-27 10:56:49 +08:00   5
    说明你的比人家的优化的好
    Ouyangan
        3
    Ouyangan  
       2016-06-27 10:57:40 +08:00   1
    chrome 插件:JSON-handle
    chineselittleboy
        4
    chineselittleboy  
    OP
       2016-06-27 11:05:24 +08:00
    @justfly 人家的好看
    abelyao
        5
    abelyao  
       2016-06-27 11:08:47 +08:00
    我觉得 json 应该保持数据本身的纯粹性,如果是我,我会选择你家的那种,至于接收方要怎么美化查看,是另一回事
    zenxds
        6
    zenxds  
       2016-06-27 11:09:48 +08:00
    返回就直接格式化好了,比如 JSON.stringify(response, null, 4)
    chairuosen
        7
    chairuosen  
       2016-06-27 11:11:06 +08:00
    chrome 插件 json formatter
    allce231
        8
    allce231  
       2016-06-27 11:38:59 +08:00
    json 本身就是字符串
    SuperMild
        9
    SuperMild  
       2016-06-27 11:43:33 +08:00
    数据传输时还是一坨的好,要看内容时各自处理。
    ango
        10
    ango  
       2016-06-27 12:04:39 +08:00
    header json 声明即可
    Infernalzero
        11
    Infernalzero  
       2016-06-27 12:08:53 +08:00   1
    看你用什么方式转换成 JSON 返回了
    如果用别人造的轮子的话,一般都会提供"features"参数供选择格式,设置成自己喜欢的格式就 OK
    cloverstd
        12
    cloverstd  
       2016-06-27 12:19:11 +08:00
    一坨多好,可以节省资源,:D
    你看到的『序列化』,其实是用空格给填充出来的
    heaton_nobu
        13
    heaton_nobu  
       2016-06-27 12:19:58 +08:00
    你的请求头里有 application/json 吗?
    akira
        14
    akira  
       2016-06-27 12:24:28 +08:00
    生产服上面肯定是用一坨的啦
    7timesonenight
        15
    7timesonenight  
       2016-06-27 12:24:44 +08:00
    仅传输的话,空白字符多,影响性能,占用带宽流量,
    slixurd
        16
    slixurd  
       2016-06-27 12:32:57 +08:00
    现在的服务器哪一个不开 gzip ,就一堆空格能有什么影响。
    lslqtz
        17
    lslqtz  
       2016-06-27 12:46:06 +08:00
    复制空格,然后加进去输出
    gimp
        18
    gimp  
       2016-06-27 12:49:10 +08:00
    数据的传输还是一坨好,查看是另一个问题,可以丢到 http://json.cn/ 上去
    incompatible
        19
    incompatible  
       2016-06-27 13:18:28 +08:00 via iPhone
    @slixurd
    1. gzip 平白耗 cpu
    2. json 数据在进入 gzip 并发给客户端这个环节之前也许已经经过了数个内部 rpc 链路或者经过了数个 IO 传输环节,这些环节会受到影响
    3. pretty json 的过程本身也会耗费额外的 cpu 时间

    对性能有影响是肯定的
    slixurd
        20
    slixurd  
       2016-06-27 16:00:22 +08:00
    @incompatible 嗯,的确是消耗 CPU 的,然而数据体积减小,网络链路传输变快了。
    至于内部 RPC ,我想没有什么 RPC 框架是以文本形式传输的,都是压缩后的 binary 。
    miaosu
        21
    miaosu  
       2016-06-27 16:03:17 +08:00
    这个无所谓吧。。。我觉得你的更好一些~
    pi1ot
        22
    pi1ot  
       2016-06-27 16:06:42 +08:00
    你返回的 http head 里的 content-type 不是 json
    zencoding
        23
    zencoding  
       2016-06-27 16:10:28 +08:00
    header("Content-Type: application/json;")
    gyteng
        24
    gyteng  
       2016-06-27 16:18:23 +08:00   1
    显然是一坨好, pretty 的话涉及用 tab 还是 space ,会引起圣战的。
    BOYPT
        25
    BOYPT  
       2016-06-27 16:26:27 +08:00
    一般 jsonnify 函数都有 pretty 开关的,比如 php 的 json_encode($data, JSON_PRETTY_PRINT);
    比如 nodejs 的 JSON.stringify(data, null, 4);

    在程序看来是等效的(非压缩传输的话会带了比较多空格)
    ipconfiger
        26
    ipconfiger  
       2016-06-27 16:35:50 +08:00
    就一串, 省流量. format 的话到本地了用工具
    Vie
        27
    Vie  
       2016-06-27 16:42:38 +08:00
    <div class="box">
    <div class="inner" align="center">
    <a href="https://www.wilddog.com/?utm_source=v2ex&amp;utm_medium=banner&amp;utm_cOntent=homepageright&amp;utm_campaign=suzhoucodingcamp" target="_blank"><img src="http://www.v2ex.com//cdn.wilddog.com/images/ads/v2ex/v2ex-500x500-1.jpg" border="0" width="250" height="250" alt="野狗科技"></a>
    </div>
    </div>
    Vie
        28
    Vie  
       2016-06-27 16:42:55 +08:00
    @Vie 竟然不行
    binux
        29
    binux  
       2016-06-27 16:47:10 +08:00
    @incompatible
    1. 难道不加 indent 就不开 gzip 了吗?
    2. 就算内部不 gzip ,多几个空格能大多少,有多少影响。真在意 protobuf 啊, msgpack 都好过 JSON 。
    3. 会增加,但是并不会增加多少。 pretty 不是额外操作,是序列化的内部过程,只是是否在输出 object 序列化前判断下是否加入 indent ,并不会增加多少消耗。

    这东西难道不是纯看喜好吗?
    jswh
        30
    jswh  
       2016-06-27 17:01:48 +08:00
    @binux @incompatible
    PHP7 的 json 函数解析其中有控制符的 json 的时候会出错,无法正确解析。官方回复是不会支持,因为 json 的标准里面就是没有控制符的。我没有读过标准,不知真假。
    这个坑了我很久。
    binux
        31
    binux  
       2016-06-27 17:14:15 +08:00
    @jswh 什么叫有控制符的 json ? JSON 标准规定:

    > All Unicode characters may be placed within the
    > quotation marks, except for the characters that must be escaped:
    > quotation mark, reverse solidus, and the control characters (U+0000
    > through U+001F).

    有控制符的 json 那还叫 json 吗?
    jswh
        32
    jswh  
       2016-06-27 17:17:21 +08:00
    @binux 就是那些为了格式化而放的换号, tab 之类的
    binux
        33
    binux  
       2016-06-27 17:20:21 +08:00
    @jswh 瞎说

    JSON-text = ws value ws

    Insignificant whitespace is allowed before or after any of the six
    structural characters.

    ws = *(
    %x20 / ; Space
    %x09 / ; Horizontal tab
    %x0A / ; Line feed or New line
    %x0D ) ; Carriage return
    zarvin
        34
    zarvin  
       2016-06-27 17:25:40 +08:00
    chrome 的话可以用 web 前端助手 这个插件
    Lullaby
        35
    Lullaby  
       2016-06-27 21:34:51 +08:00
    jsonview
    kslr
        36
    kslr  
       2016-06-27 22:42:41 +08:00
    @pi1ot 你是图钉吗
    fhefh
        37
    fhefh  
       2016-06-27 22:45:16 +08:00
    kevinroot
        38
    kevinroot  
       2016-06-27 23:05:34 +08:00
    “别人家的”多了一些空格换行,浪费空间。就是应该一坨,解析或者用工具查看就好了。 chrome 有 JSONView
    predator
        39
    predator  
       2016-06-27 23:13:16 +08:00
    我家开发测试环境带 PRETTY 格式,生产环境不带
    lslqtz
        40
    lslqtz  
       2016-06-27 23:34:39 +08:00 via iPhone
    @slixurd 那么小数据没必要开 gzip 。。
    个人表示,不喜欢加空格,这些是让程序来处理的。。
    Balthild
        41
    Balthild  
       2016-06-28 01:30:28 +08:00 via Android   1
    测试时用别人家的,生产时用你家的。
    pi1ot
        42
    pi1ot  
       2016-06-28 09:00:39 +08:00
    @kslr 图钉是什么东西
    vus520
        43
    vus520  
       2016-06-28 09:12:10 +08:00
    ```php
    ~ php -a
    Interactive shell

    php > $a = ["a"=>"b", "c"=>["d", "e", "f"]];
    php > echo json_encode($a, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    {
    "a": "b",
    "c": [
    "d",
    "e",
    "f"
    ]
    }
    php > $a = ["a"=>"b", "c"=>["中文也行啊", '引号"也行啊']];
    php > echo json_encode($a, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    {
    "a": "b",
    "c": [
    "中文也行啊",
    "引号\"也行啊"
    ]
    }
    php >

    ```
    killerv
        44
    killerv  
       2016-06-28 09:16:39 +08:00
    如果仅仅为了好看,浏览器装个插件就行了,比这个好看好用。
    wbt
        45
    wbt  
       2016-06-28 09:43:02 +08:00
    用 chrome 插件啊骚年
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3184 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:57 PVG 19:57 LAX 03:57 JFK 06:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86