我到现在都还没搞明白什么时候该用大括号,什么时候该用中括号,另外,我还是没搞明白 key 到底要不要加引号???加不加引号是否影响各种浏览器兼容性?为什么不像 php7 那样直接全部用中括号,统一格式,简洁明了。这为本来就复杂的前端更加雪上加霜

给 phper 丢脸了,被喷也值了,我还是去恶补一下前端知识吧

json 除了数组以外都是大括号吧(

我只能说没喷到点子上

对象用{}, 数组用[]

对象用{},数组用[],至于怎么套娃随便,看业务需求。key 的话,编辑 json 文件的时候不加引号 vscode 报错

PHP 那个数组和 map 混用的 array 还是留给你自己用吧。

哪里反人类了,是 PHP 写多了懒了吧

也可以最外层是数组,随便套娃

???

????
数组和对象都没搞明白的人跑来喷 json ?

www.json.org/json-zh.html

lz 属于那种 php 写多了,连数组和字典(或 map)都分不清的人了

曾经以为写 php 的人分不清数组和字典是个段子,没想到真有这样的人。。。。。

我觉得 JSON 挺方便啊,比 YAML 看着更舒服。

JSON 的 key 都要加双引号,不用加双引号的是 JS 的对象

key 要不要加引号? 你写的是 json 还是 json5 ?

所言极是,我好像确实没分清楚,尴尬了

因为对于 PHP 程序员 dictionary 和 array 是一个东西。

JSON (JavaScript Object Notation),注意 JS 是啥的缩写。对于 js 程序员来讲就很正常,对于 PHP 程序员来讲就和现代人看文言文一样(只是比喻,没有好坏之分)

???
这都分不清的程序员,可能是脑容量太小了

不如看看 XML ?

建议使用 xml

#11
op 大概是只写过 php 吧。。。先入为主的概念~

算是搞清楚了为什么有些 PHP 后台数据结构传过来一团糟,数组和对象都能搞混

习惯了 xml ,改用 json 后,发现竟然没有对应的数组结构。
json 转到 xml 不行,xml 转到 json 没问题,真是晕过去。

XML 才是正解

json 的出发点,是相比于 xml 更高密度更低复杂度
跟数组完全不在一个维度上,不适合用来对比

?被 php 惯坏了这是?

JSON 格式,能够如此广泛的被使用,就应该知道它设计是符合当下需求的啊。
你看 20 年前设计的 xml ,现在还有多少新产品会去用?

其实严格来说,js 的数组也是对象,开发中用{}代替[]也能用

尴尬了
php 的心智负担确实是极低,基本上 array 一把梭,变量类型自动推导。
所以更换到其它语言的时候,楼主还是需要仔细看一下其它语言的数据类型和数组,并应用在合适的场景。

所以当你认为 json 反人类的时候,可能你也变成了跟楼下喷 PHP 的那些人一样。

有一些编程语言虽然不如 php 那样心智负担比较低,但是它们那么设计是有一定的场景需求的(就像汽车的手动挡和自动挡),所以用合适的工具去做合适的事情是一个成熟的人应该具备的能力,不要代入情感和偏见。

ps. 很多语言都有语法糖,但是可能都不如 php 甜,个人看法。

这个世界已经这么黑 PHP 了,OP 不要再给 PHP 招黑了

你不会用格式化吗?

???

xml 足够简单,就是一棵单根树,很多语言都可以直接导入。属于计算机的基本数据结构。
json 就比较复杂了,通常跨语言,都需要导入第三方库才能方便使用。

不光是分不清数组和字典,还不知道返回[]、{}、null 有啥区别:"不一样都是空吗"
最可怕的还是同一个接口入参不同返回格式能乱变,比如参数 n 大于 5 返回[1,2,3,4,5,6],小于 5 返回{"1": 1, "2": 2, "3": 3},然后还是那句老话:“这不是一回事儿吗”

我觉得挺简明的,尤其是写 Python 的时候。。。

我知道对于初级 php 程序员来说,认为这两个是同一个东西。但是,稍微有点经验的。从心智上是能分得清这两者是有区别的。混在一起只是语法糖,不代表从逻辑上是同一个东西。

php 的数组才是一大毒瘤啊,大哥,数据结构不明确,各种瞎容错瞎转换,复杂流程中简直不要太坑人

我主语言也是 php ,接触语言多了之后,你会发现,php 的数组才是反人类
相比 json 设计很优雅很清晰

中括号和大括号都分不清嘛?数组和对象区别蛮大的吧。

害怕

请不要给 PHP 招黑,我谢谢您了

找个厂上班吧。🙏

找个厂上班吧。🙏

过分了🐶

简洁明了?

JSON 和 PHP 代码中的数组又不是同一类的东西,要比也得跟 PHP 的 serialize 比吧?后者更反人类。

{}难道不是无序的?

找个厂去打螺丝吧

确实给 phper 丢脸了,上古 phper 都是能手撸 vanilla js 和 Photoshop 的,哈哈

错误的提问方式❌:我想要实现一个这样的场景,这是我的报错日志,我做了如下尝试,有什么办法可以解决这个问题?

正确的提问方式✅: A 就是个垃圾,你看我用 B 也能做到一样好(附上错误的实践方式)

居然还有喷 PHP 数组的
用过 GO NODEJS PYTHON JAVA 但我还是觉得 PHP 的数组最香

找个厂上班吧。🙏

json 不支持注释,这个才是痛点

json 最大的好处是它是 JavaScript 原生的对象格式啊

php 输出空对象 json 字符串这个逻辑,估计就有不少人写不好。

高情商 👍👍👍 但是不是放反了

“简单”不一定“明了”

json 确实不爽
我更喜欢 yaml

#52 VSCode 自己的配置项支持 jsonc ,其他场景认知上感觉都不支持。(╯﹏╰)

PHP 在编程社区风评不好,和你这样的发言脱不了干系..

垃圾 PHP 还来碰瓷别人?

找个厂上班吧

钓鱼贴??

JS 和 PHP 都会一点儿,同不理解楼主在不满啥。。

JSON 这东西,很多地方都能直接用这点儿很不错,偶尔的偶尔手动编辑下也还算方便。。

编辑频率高点儿就不如 yaml 了,但是使用时就要需要额外转换。。

JS 里,能用 v.a 的地方也可以用 v["a"];

PHP 里该用 $v->a 还是 $v["a"] 要仔细区分就很气人。。

你可别给 PHP 招黑了

2333333333333333333

感觉 v 友攻击性有点强啊

。。。。。。

这跟前端没关系,array 和 dictionary 的概念是普遍的,逻辑上本来就是不一样的结构,为什么要用一样的表示方法,混乱不堪。还有 json 只是数据交换格式,和浏览器兼容性又有什么关系

这。。。楼上喷的够多了,咱就不喷了
不过其实 PHP 的数组使用 HashTable 来实现的,只不过字典的 key 支持数组和字符串,也就是 PHP 中所谓的索引数组和关联数组。
所以在用 PHP 数组的时候,实际上都是在操作字典,这可能是楼主分不清大括号和花括号的原因之一。

这是 PHP 的锅,不是 JSON 的锅。

多学几种语言就知道了,只有 PHP 是字典和数组都用[]的,别的语言都是分别用{}和[]……

{1:{id:1,name:'dasdas'},2:{id:2,name:'dasdas'}}

[{id:1,name:'dasdas'},{id:2,name:'dasdas'}]

没有用过 php,但我好像可以理解为啥这样,哈哈哈 数组变成了字典的子集 如 [0:"a",1:"b",2:"c"] 前面 0 1 2 不写的话可以这样 ["a","b","c"] ,不知 php 是不是这样

0 1 2 解释器自动填充,一个语法糖罢了,但是好像这个玩意也可以做成结构的载体 可以做成数组的载体 至于底层内存分配是连续的空间或是离散的则被屏蔽掉了,用起来简单了,但也让楼主分不清为啥这样了,哈哈哈哈

感觉挺好的,确实可以多学几种语言。

建议学 js 、然后底层语言和高性能各学一个、最好 python 也学一下,虽然多,但是可以慢慢来。

json 就是 json ,前端要用,后端也要用 (狗头

对于这个语法糖 还是站 json 的写法,原因就是 当用数组'[]'时习惯的期望值是内存的连续空间 ,而使用结构'{}'时则更倾向与离散空间, 这个语法会导致思维的负担

php 里压根没有数组,本质都是字典,key 就是 index ,只是被隐藏了。js 也是这样的,不过 js 起码形式上做了区分,php 则完全没区分

#26 后面那句就不够严谨了....
数组形式可以通过 length 获取长度,对象形式没有 length 属性。

那对于 js 来说 确实数组也是对象

你这一来,这为本来就容易招黑的 PHP 更加雪上加霜...

哈哈哈,这就是楼主为啥混乱了,数组 字典 明明是一个写法啊

可能你学得语言还是不够多;你的说法显然不对:C++ 自带的数组和“字典”(std::unordered_map) 都用 [] 操作符访问元素。

严格来讲,理解偏差完全就不该是 PHP 的锅;问题来自数组(array) 这个概念本身。

array 这玩意儿作为数据结构在早年( 1950 年代)就极其模糊,但硬要说一般的外延,就是所谓的关联数组(associative array) :一个 key 对应到作为数组元素的 value 的映射。
用类 ALGOL 语言的习惯来讲,就是能用 [] 的里面塞 key 的东西,所谓 subscritable 。
至于这个 key 是个整数,来使 [] 里面放 key 取得元素能有明确 O(1) 时间复杂度的随机访问,那是实现细节。用连续存储的线性表实现叫向量(vector) 。
特别地,向量一般具有确定的静态空间上界。不具有上界限制的线性表叫串(string) 。(虽然严格来讲,数学上的串不一定在乎复杂度要求,不过不少算法实际上隐含了要求。)
其它实现可以有不同的计算复杂度性质。
例如二叉搜索树(BST) 可以实现平均 O(log n) 的元素访问,同时在插入和删除元素上比向量更优化。这种索引结构在 C++ 中叫 map ,会跟数学上的映射(map) 产生歧义;之后的一些其它语言改叫字典(dictionary) 。
而散列表(hash table) 能实现平摊(amortized) O(1) 的访问和增删操作。
另外还有 Illffe vector 等特定于实现而不常被应用直接使用的数据结构。

向量因为早年机器实现的开销较小的关系曾经流行过,例如 B 语言自带支持。然而自从抄了 B 的 C 把向量硬叫做数组以后,到处都乱了。
C 的流行影响了很多语言,导致这些语言设计中的词汇表混乱——该叫向量的不叫向量而叫数组,别的就顺带乾坤大挪移了。典型的像 C++ ,vector 被用于原本叫做 string 的数据结构上,而 string 则用作特指混了 char_traits 这种二道贩子实现细节私货的特定实现。
以 C 为中心在另一方面也是无耻的;考虑 1957 年就开工的 APL ,(虽然代码模样不咋地)人家混饭吃的核心、不知比你 vector 屌多少倍的 array 就这样被偷换概念了,好意思不?

所以 PHP 这种设计反而是文艺复兴,恢复了 array 历史上应有的本来面目。

题外话:
1.其实向量的 O(1)也就是形式上的。所以广泛使用向量实现数组的语言嘛……
像 C 都没保证下标访问的复杂度,所以实际上也没禁止实现使用树或者散列表实现内建数组。
C++倒是隐含了随机访问迭代器 O(1)访问要求,考虑到和内建指针以及数组的关系,实现基本别无选择。但这也不是正经的限制。
更要命的是一旦放在主存上,主流环境根本无法严格实现。
典型的宿主(hosted) 实现,不保证实时性,自然不直接提供这种物理上保证 O(1)的例程——比如程序跑一半可能切出去调度了。
即便不考虑那么流氓的情况,现代 CPU 上的缺页中断里可以允许用户编码明显不 O(1)的非平凡程序,现实也很可能一个程序跑一半换页了结果一个访问突然卡上几百万倍;或者可能有更倒霉的,比如正好放 swap 的机械硬盘有坏道但宿主系统装作系统完整可用的情况——实际上也根本没保证可终止,更别说 O(1)了。
2.如果忽略修改之类的副作用而只允许构造和访问元素,一元函数(更确切地,映射)和 subscritable 形式的数组同构,都可以用 → 类型构造器表达的类型为其定型(typing) 。所以纯函数式语言不强调数组,是根本不需要。

淦,合并回复的修改好像被吃了……
C++ 自带的数组和“字典”(std::unordered_map) 都能用 {} 初始化,而都用 [] 操作符访问元素。

PHP 在编程社区风评不好,和你这样的发言脱不了干系

难怪之前 phper 我要数组的时候,他给我:
{
"0": {...},
"1": {...},
"2": {...}
}

我猜 楼主应该是想表达 PHP 数组 定义爽。例如一个深层的多维数组 $a'b''d'.... = 1;

换到 JSON 下,就要 { "a": { "c" : { "d" : { "e" { .... : 1 } } } } }

#79 为什么非要认为 Array == Object ?

我这里反而不喜欢,主要是缩进不能弄错,编辑文件有点麻烦。我觉得 toml 可能更好些。

有个东西叫标准....

你这样比较有啥意义,你看看 typeof(new Array())

看看原型链就知道 一切都是对象

不是前端还是 php 的问题,是你的问题。。。。

这么说显得你前端基础很差....Array 确实是继承 Object 但是 js 实现上本身有连续数组和非连续数组的概念 引擎实现上也会有对应的优化 不然就全部当对象去初始化变量好了 反正 a[1]也一样能用

我只是说 “那对于 js 来说 确实数组也是对象”,没啥问题

楼上的喷楼主就完事了!为什么要喷 PHP ?够睿智的。

#69
#82
JS 里除了 TypedArray 以外的普通 Array 在实现上也是 Object ,元素存储也是 kv 索引

toml 更好 哈哈 这个我也喜欢

为本来就黑的 php 雪上加霜

PHP 程序员连数据结构的最基础的知识都不懂吗?
大一新生也知道什么是数组,什么是 map 吧???

我怀疑你是来骗铜币的,但是我没有证据