ios/android 很难处理对象数组吗?

2020-05-12 15:00:14 +08:00
 sayitagain

一直以来有个疑问,之前公司的 ios 开发要求我的接口给出的数组数据不要是对象,说处理不了,不能处理. 举例,本人 PHPer,我通常自己用的数组都是带下标转的,例如 { "100":{ "id":100 "title":"xxx" }, "105":{ "id":105 "title":"sss" } } 当我已知 id 是 105 的情况下我就可以直接 $array[105][title]取数据了.当我需要渲染数据的时候我就直接 foreach,数组的下标似乎对我没有任何影响. 但公司的 ios 说上面的处理不了,对数据提出以下要求,一定要下面这种常规的数组形式,而不是对象形式 [ "0":{ "id":100 "title":"xxx" }, "1":{ "id":105 "title":"sss" } ] 不明白处理上有啥不同?还是有什么说法?

8344 次点击
所在节点    程序员
79 条回复
nicevar
2020-05-12 18:11:32 +08:00
这个问题自己既做客户端又做服务端最清楚了, 客户端最不想看到胡里花哨的数据, 本来一句代码解析的东西, 非要搞出一坨代码来处理, 浪费精力, 而且容易出现隐患, 毕竟客户端版本发出去了再发生变动很难处理, 只能靠强制用户升级之类的操作.
slyang5
2020-05-12 18:20:47 +08:00
@sayitagain 说实话你返回这种 ,我估计开骂了
sayitagain
2020-05-12 18:24:10 +08:00
@slyang5 原始接口并非是给 app 用的,最近 app 也需要就直接给出来了,压根没考虑到这边的这个数据格式
CommandZi
2020-05-12 18:25:05 +08:00
按字典放回,那么这一组数据在后端固有的顺序去到前端后不就丢失了么
xrr2016
2020-05-12 18:31:40 +08:00
[ { "id":100 "title":"xxx" "key":1}, { "id":105 "title":"sss" key":2} ] 肯定是这种形式更方便前端 /移动端处理
xrr2016
2020-05-12 18:32:37 +08:00
@CommandZi 表加个 sort 字段就好了
newtype0092
2020-05-12 18:52:48 +08:00
没有难不难的,简单来说就是不标准,数组适应性更广,如果不是有特殊的优化需求的话就不要搞特殊。
zsdroid
2020-05-12 18:59:44 +08:00
问题产生的原因是,php 是弱语言(万物皆数组),java,oc 是强语言(万物皆对象)
zsdroid
2020-05-12 19:04:40 +08:00
有种情况,phper 经常被骂,有数据时返回[],没数据时返回{}
charlieputon
2020-05-12 19:07:39 +08:00
@sayitagain 这个还需要跟你解释,你作为后端难道不是应该你自己去了解吗?基本的 json 格式都不知道,做个鸡儿的后端。这种辣鸡贴子都快月经了
HongJay
2020-05-12 19:14:01 +08:00
php ?
deyu
2020-05-12 19:16:47 +08:00
每一行都有自已的难处 相互理解咯
CodeCodeStudy
2020-05-12 19:31:13 +08:00
@zsdroid 可以用 ArrayObject 解决

```php
$data = [];
if (!$data) {
$data = new \ArrayObject();
}

echo json_encode($data);
```
yuzo555
2020-05-12 19:32:36 +08:00
按语义来说一般是要返回数组,而不是对象的。
PHPH
yuzo555
2020-05-12 19:34:10 +08:00
PHP 如果能提供一种访问数组元素的方式,类似 CSS Selector,比如
$a = [ { "id":100 "title":"xxx" "key":1}, { "id":105 "title":"sss" key":2} ];

$a[id=100] 就能拿到 { "id":100 "title":"xxx" "key":1} 那就刺激了
MrStark
2020-05-12 20:10:20 +08:00
两个原因:

1 、Android 我不清楚,但 iOS 端,key-value pair 的集合是无序的,只有数组才是有序的,如果开发过程中没问题,但上线后顺序出问题了,这个锅谁来背?

2 、客户端完全没必要解析外面 "100"、"105" 这一层,客户端需要把 json 转成模型对象,干嘛费功夫解析一遍外边这层无用的数据呢,外边这一层对于客户端来说完全没有意义。
youxiachai
2020-05-12 20:19:46 +08:00
你这叫 map..不叫带下标数组....
bbappa
2020-05-12 20:30:14 +08:00
7 楼是对的
yikuo
2020-05-12 20:37:34 +08:00
虽然 php 里面的数组是 array 和 map 一体,但你这样用已经不算通常意义上的数组了
dilu
2020-05-12 20:38:05 +08:00
@loshine1992 其实呢 phper 也挺冤枉的,因为在 php 里面对象跟数组都是数组,如果原本是对象的,对象因为某些原因给了空就会变成数组的 强类型语言对接弱类型语言有很多坑要踩。

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

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

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

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

© 2021 V2EX