phoben 发表于 2023-11-10 09:51:22

获取 JSON 属性值时,能否不要抛异常?




经常需要在项目里通过"XXX.XX",来获取 JSON 属性值,但如果属性名不存在会抛异常,导致程序结束。
这是不合理的,如果属性值不存在直接返回空值 Null 即可。
例如在 JS 里,如果data.content不存在,只会返回 null,不会报错。

抛异常会导致逻辑发生中断,但属性不存在是非常正常的,有时候我们需要允许这个属性不存在。

David.Zhong 发表于 2023-11-10 17:57:15

抛异常会导致逻辑发生中断,但属性不存在是非常正常的,有时候我们需要允许这个属性不存在。
超哥,可以再举个真实的例子不?比如说什么情况下需要允许这个属性不存在呢?

renho 发表于 2023-11-10 22:30:08

取值这一块确实人性化欠缺

phoben 发表于 2023-11-10 23:20:00

本帖最后由 phoben 于 2023-11-10 23:26 编辑

David.Zhong 发表于 2023-11-10 17:57
超哥,可以再举个真实的例子不?比如说什么情况下需要允许这个属性不存在呢?

1,一般用于用户传参进来,我根据参数取 json 的对应属性,如果用户的参数,在 json 中并不存在,我只需要空值。
2,前端提交 json 给后端,后端需要取某属性值,如果没有提供这个属性,我需要知道。但是现在只要尝试访问这个属性就抛异常,这个没法操作了。
3,最常见的,用服务端写对外接口,接受一个 data 参数,并约定好内部结构,有些参数不是必填,例如 data.qty,对于非必填参数,一般用户是不比提供的,但是如果提供了,我就需要读取并使用,此时后端命令中使用 data.qty 读取判断是否空值即可,但活字格现在不让我访问 data.qty,一旦 qty 不存在就会直接中断报错,这个显然不合理。

其实场景已经不重要了,看原生代码逻辑是怎么处理得就可以,如果不这么处理肯定有问题

phoben 发表于 2023-11-11 16:55:09

lh123 发表于 2023-11-11 15:19
异常是要提醒的。他不过是不进行if来处理一下。我是要异常提示。

我都用IF进行判断来处理。我认为异常 ...

空值足够判断了,没必要终止命令

David.Zhong 发表于 2023-11-13 15:17:28

从本质出发,js是一种弱类型语言,C#是一种强类型语言,服务端命令是沿用了强类型语言的概念,所以在没有进行非空检验的情况下,取一个不存在的属性,会报错,如果有相关的逻辑,一是可以提前判空,也是可以用异常捕获命令处理后续逻辑。

此外C#是在C# 6.0中,引入了一个 ?. 的运算符,可以更简洁的实现需要判空的逻辑。

服务端是否支持?可空标识?
https://gcdn.grapecity.com.cn/showtopic-95703-1-1.html
(出处: 葡萄城开发者社区)

这个已经有记录需求,可以再次跟进一下~~~:lol

phoben 发表于 2023-12-5 11:03:12

David.Zhong 发表于 2023-11-13 15:17
从本质出发,js是一种弱类型语言,C#是一种强类型语言,服务端命令是沿用了强类型语言的概念,所以在没有进 ...

钟总,不知道这个需求最终解决方案有了吗?下个103版本中是否包含?
我这边项目中大量的用到了对外API接口,每个接口都接收十几个不同参数,有的必填,有的不必填,现在这个机制使我对不必填的参数不敢取值,只好要求对方全部必填,哪怕为空都行,很是麻烦,劳烦跟进一下,谢谢

Patrick.Zhu 发表于 2023-12-5 17:59:01

超哥,这个功能103确实是包不进去了,这个需求还和所有需求在一起衡量和排期中,毕竟资源和时间有限,我们需要确保能够在整体上为更多的用户提供最大的价值。
页: [1]
查看完整版本: 获取 JSON 属性值时,能否不要抛异常?