如何优化很长的 JSON 数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优化很长的 JSON 数据相关的知识,希望对你有一定的参考价值。

我们知道,JSON作为一种轻量级的数据交换格式,现在被广泛应用,特别是在API层,返回数据格式基本上都是JSON。但是,JSON字符串如果过长,那在网络传输中也存在耗时的,站在性能角度我们需要合理优化JSON。
JSON优化建议
1、服务器端开启GZip压缩
主流的服务端都支持GZip压缩,对于一般的纯文本内容GZip压缩率在35%以上,这样做的好处也很明显:
减少JSON输出大小,网络传输速度更快;
节省带宽。
2、键名缩短
对于结果集而言,数据都是查询循环输出的,所以当我们把键名缩短也变相压缩了JSON文本长度。比如原本的 "name":"张三" 我们可以写为 "a":"张三"
3、JSON中的中文避免被转为Unicode编码
现在也有不少人喜欢将JSON中的汉字转为Unicode编码,此时JSON文本内容就会变得很长,如果避免汉字转码,可以控制文本长度。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
参考技术A 1,开启gzip,压缩率很高,即便是很长的文本,在网络中传输量也很小2,不建议分次请求,除非是业务需要。连接次数过多,加大了并发的压力。3,提醒用户点击的做法可以通过按钮反馈或loading条来做4,如果有可能,考虑提前预读你可以这样,在一个隐藏的 iframe 里面请求服务器,返回值是这样的:较长的JSON也没什么问题,现在主要都是靠JSON传输,但是得注意一个问题,别有特殊符号,有特殊符号,很容易出现问题,解析不了,常见的有 \n、\t之类的都有影响。推荐2个解析工具给您。查询数据的时候使用分页查询,减小json的数据量

如何在 Python 中打破很长的代码行? [复制]

【中文标题】如何在 Python 中打破很长的代码行? [复制]【英文标题】:How to break very long code lines in Python? [duplicate] 【发布时间】:2020-01-18 20:33:45 【问题描述】:

如何通过缩短每一行来使我的 python 代码更漂亮?例如:我有一个很长的 if 语句,我想缩短 => 将它的长度分成几行:

if (imgA.shape[0] != imgB.shape[0]) and (imgA.shape[1] != imgB.shape[1]) and (imgA.shape[2] != imgB.shape[2]):

我想要这样的东西:

    if (imgA.shape[0] != imgB.shape[0]) and 
      (imgA.shape[1] != imgB.shape[1]) and
      (imgA.shape[2] != imgB.shape[2]):

但是我得到一个语法错误。有人吗?

【问题讨论】:

【参考方案1】:

只比较数组本身?

if imgA.shape != imgB.shape:

或者如果其余元素很重要:

if imgA.shape[0:2] != imgB.shape[0:2]:

【讨论】:

好的,显然是个坏例子。但是,您如何将其拆分为多行?【参考方案2】:

你可以把它放在括号里:

if ((imgA.shape[0] != imgB.shape[0]) and 
    (imgA.shape[1] != imgB.shape[1]) and 
    (imgA.shape[2] != imgB.shape[2])):
    #do stuff

【讨论】:

这行得通。谢谢!【参考方案3】:
if (
    (imgA.shape[0] != imgB.shape[0]) and 
    (imgA.shape[1] != imgB.shape[1]) and
    (imgA.shape[2] != imgB.shape[2])
):
    #do something

我通常依靠括号括起参数来换行。这会在 Jupyter 笔记本中传递语法。

【讨论】:

虽然我不喜欢使用中间的缩进,而且我觉得代码越分段越容易理解,@Derek_Eden 的答案可能更正确。【参考方案4】:

不是一个确切的答案,但一个好主意是为每个变量分配名称:

check_shape_0 = imgA.shape[0] != imgB.shape[0]
check_shape_1 = imgA.shape[1] != imgB.shape[1]
check_shape_2 = imgA.shape[2] != imgB.shape[2]

if (check_shape_0) and (check_shape_1) and (check_shape_2):
    #Do something

重命名的布尔值会让未来的代码读者更清楚地了解 if 语句中发生了什么。

通过为布尔值选择合适的变量名,if 语句几乎可以像英语一样阅读,这使得代码阅读起来非常舒适。

而较短的名称使您的 if 语句更小。

【讨论】:

【参考方案5】:

您可以使用\ 将同一语句分成多行:

if (imgA.shape[0] != imgB.shape[0]) and \
    (imgA.shape[1] != imgB.shape[1]) and \
        (imgA.shape[2] != imgB.shape[2]):

【讨论】:

这很好。谢谢! 乐于助人。 :)

以上是关于如何优化很长的 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

Swifty Json 变得不为人知但很长的路很好用?

从 JSON 中提取很长的字符串到 CLOB

如何将很长的字符串保存到firebase firestore数据库中?

如何在MYSQL数据库中保存很长的整数数据

如何在 Oracle 中读取很长的 BLOB 列?

如何使用 Pytorch 中的截断反向传播(闪电)在很长的序列上运行 LSTM?