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

2020 年 5 月 12 日
 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" } ] 不明白处理上有啥不同?还是有什么说法?

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

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

echo json_encode($data);
```
yuzo555
2020 年 5 月 12 日
按语义来说一般是要返回数组,而不是对象的。
PHPH
yuzo555
2020 年 5 月 12 日
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 年 5 月 12 日
两个原因:

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

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

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

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

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

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

© 2021 V2EX