1
crazytec 2022-03-16 11:31:55 +08:00
json 除了数组以外都是大括号吧(
|
2
xhinliang 2022-03-16 11:31:56 +08:00 40
我只能说没喷到点子上
|
3
mineralsalt 2022-03-16 11:32:19 +08:00 2
对象用{}, 数组用[]
|
4
Elissa 2022-03-16 11:32:37 +08:00
对象用{},数组用[],至于怎么套娃随便,看业务需求。key 的话,编辑 json 文件的时候不加引号 vscode 报错
|
5
xhinliang 2022-03-16 11:32:51 +08:00 10
PHP 那个数组和 map 混用的 array 还是留给你自己用吧。
|
6
yaott2020 2022-03-16 11:32:57 +08:00 via Android
哪里反人类了,是 PHP 写多了懒了吧
|
8
66beta 2022-03-16 11:33:41 +08:00
???
|
9
sampeng 2022-03-16 11:35:49 +08:00 6
????
数组和对象都没搞明白的人跑来喷 json ? |
10
learnshare 2022-03-16 11:36:38 +08:00 1
|
11
BeautifulSoap 2022-03-16 11:38:02 +08:00 77
lz 属于那种 php 写多了,连数组和字典(或 map)都分不清的人了
曾经以为写 php 的人分不清数组和字典是个段子,没想到真有这样的人。。。。。 |
12
pendulum 2022-03-16 11:38:39 +08:00
我觉得 JSON 挺方便啊,比 YAML 看着更舒服。
JSON 的 key 都要加双引号,不用加双引号的是 JS 的对象 |
13
lisongeee 2022-03-16 11:38:41 +08:00
key 要不要加引号? 你写的是 json 还是 json5 ?
|
14
kisshere OP |
15
ZE3kr 2022-03-16 11:40:04 +08:00 via iPhone
@sampeng 因为对于 PHP 程序员 dictionary 和 array 是一个东西。
JSON (JavaScript Object Notation),注意 JS 是啥的缩写。对于 js 程序员来讲就很正常,对于 PHP 程序员来讲就和现代人看文言文一样(只是比喻,没有好坏之分) |
16
james2013 2022-03-16 11:41:03 +08:00
???
这都分不清的程序员,可能是脑容量太小了 |
17
Leonard 2022-03-16 11:41:55 +08:00
不如看看 XML ?
|
18
2NUT 2022-03-16 11:42:52 +08:00
建议使用 xml
|
19
undefinedList 2022-03-16 11:43:11 +08:00
@BeautifulSoap #11
op 大概是只写过 php 吧。。。先入为主的概念~ |
20
Building 2022-03-16 11:43:43 +08:00 via iPhone 2
算是搞清楚了为什么有些 PHP 后台数据结构传过来一团糟,数组和对象都能搞混
|
21
3dwelcome 2022-03-16 11:44:04 +08:00 via Android
习惯了 xml ,改用 json 后,发现竟然没有对应的数组结构。
json 转到 xml 不行,xml 转到 json 没问题,真是晕过去。 |
22
darluc 2022-03-16 11:45:08 +08:00
XML 才是正解
|
23
opengps 2022-03-16 11:47:54 +08:00
json 的出发点,是相比于 xml 更高密度更低复杂度
跟数组完全不在一个维度上,不适合用来对比 |
24
kenvix 2022-03-16 11:49:40 +08:00
?被 php 惯坏了这是?
|
25
yazoox 2022-03-16 11:50:24 +08:00
JSON 格式,能够如此广泛的被使用,就应该知道它设计是符合当下需求的啊。
你看 20 年前设计的 xml ,现在还有多少新产品会去用? |
26
Rocketer 2022-03-16 11:51:05 +08:00 via iPhone
其实严格来说,js 的数组也是对象,开发中用{}代替[]也能用
|
27
BBCCBB 2022-03-16 11:52:46 +08:00
|
28
Actrace 2022-03-16 11:53:12 +08:00
php 的心智负担确实是极低,基本上 array 一把梭,变量类型自动推导。
所以更换到其它语言的时候,楼主还是需要仔细看一下其它语言的数据类型和数组,并应用在合适的场景。 所以当你认为 json 反人类的时候,可能你也变成了跟楼下喷 PHP 的那些人一样。 有一些编程语言虽然不如 php 那样心智负担比较低,但是它们那么设计是有一定的场景需求的(就像汽车的手动挡和自动挡),所以用合适的工具去做合适的事情是一个成熟的人应该具备的能力,不要代入情感和偏见。 ps. 很多语言都有语法糖,但是可能都不如 php 甜,个人看法。 |
29
littleylv 2022-03-16 11:54:17 +08:00
这个世界已经这么黑 PHP 了,OP 不要再给 PHP 招黑了
|
30
murmur 2022-03-16 11:56:20 +08:00
你不会用格式化吗?
|
31
we8105 2022-03-16 11:57:30 +08:00
???
|
32
3dwelcome 2022-03-16 11:57:48 +08:00 via Android
@yazoox xml 足够简单,就是一棵单根树,很多语言都可以直接导入。属于计算机的基本数据结构。
json 就比较复杂了,通常跨语言,都需要导入第三方库才能方便使用。 |
33
debuggerx 2022-03-16 11:58:49 +08:00 1
@BeautifulSoap 不光是分不清数组和字典,还不知道返回[]、{}、null 有啥区别:"不一样都是空吗"
最可怕的还是同一个接口入参不同返回格式能乱变,比如参数 n 大于 5 返回[1,2,3,4,5,6],小于 5 返回{"1": 1, "2": 2, "3": 3},然后还是那句老话:“这不是一回事儿吗” |
34
Dvel 2022-03-16 12:00:57 +08:00
我觉得挺简明的,尤其是写 Python 的时候。。。
|
35
sampeng 2022-03-16 12:04:31 +08:00 1
|
36
sujin190 2022-03-16 12:04:58 +08:00 1
php 的数组才是一大毒瘤啊,大哥,数据结构不明确,各种瞎容错瞎转换,复杂流程中简直不要太坑人
|
37
rekulas 2022-03-16 12:08:18 +08:00 2
我主语言也是 php ,接触语言多了之后,你会发现,php 的数组才是反人类
相比 json 设计很优雅很清晰 |
38
phxsuns 2022-03-16 12:09:49 +08:00
中括号和大括号都分不清嘛?数组和对象区别蛮大的吧。
|
39
siweipancc 2022-03-16 12:13:00 +08:00 via iPhone
害怕
|
40
liuzhaowei55 2022-03-16 12:15:35 +08:00 via iPhone
请不要给 PHP 招黑,我谢谢您了
|
41
rioshikelong121 2022-03-16 12:19:12 +08:00 14
找个厂上班吧。🙏
|
42
liushuangbill 2022-03-16 12:26:18 +08:00
找个厂上班吧。🙏
|
43
ChrisFreeMan 2022-03-16 12:26:49 +08:00 via iPhone
@rioshikelong121 过分了🐶
|
44
watcher 2022-03-16 12:30:29 +08:00 via iPhone
简洁明了?
|
45
ysc3839 2022-03-16 12:30:52 +08:00 via Android
JSON 和 PHP 代码中的数组又不是同一类的东西,要比也得跟 PHP 的 serialize 比吧?后者更反人类。
|
47
spicecch 2022-03-16 12:33:13 +08:00
找个厂去打螺丝吧
|
48
maomaosang 2022-03-16 12:33:40 +08:00
确实给 phper 丢脸了,上古 phper 都是能手撸 vanilla js 和 Photoshop 的,哈哈
|
49
encounter2017 2022-03-16 12:40:05 +08:00 1
错误的提问方式❌:我想要实现一个这样的场景,这是我的报错日志,我做了如下尝试,有什么办法可以解决这个问题?
正确的提问方式✅: A 就是个垃圾,你看我用 B 也能做到一样好(附上错误的实践方式) |
50
leonidas 2022-03-16 13:02:55 +08:00
居然还有喷 PHP 数组的
用过 GO NODEJS PYTHON JAVA 但我还是觉得 PHP 的数组最香 |
51
imherer 2022-03-16 13:10:12 +08:00
找个厂上班吧。🙏
|
52
dajj 2022-03-16 13:10:43 +08:00
json 不支持注释,这个才是痛点
|
53
wenzhonghu 2022-03-16 13:12:19 +08:00
json 最大的好处是它是 JavaScript 原生的对象格式啊
|
54
koolob 2022-03-16 13:19:03 +08:00
php 输出空对象 json 字符串这个逻辑,估计就有不少人写不好。
|
55
rekulas 2022-03-16 13:19:09 +08:00
@encounter2017 高情商 👍👍👍 但是不是放反了
|
56
saymoon 2022-03-16 13:30:19 +08:00
“简单”不一定“明了”
|
57
asuraa 2022-03-16 13:32:30 +08:00
json 确实不爽
我更喜欢 yaml |
59
angrylid 2022-03-16 13:32:56 +08:00 via Android 1
PHP 在编程社区风评不好,和你这样的发言脱不了干系..
|
60
cweijan 2022-03-16 13:39:33 +08:00 1
垃圾 PHP 还来碰瓷别人?
|
61
heyOhayo 2022-03-16 13:42:13 +08:00
找个厂上班吧
|
62
bigbigpark 2022-03-16 13:45:34 +08:00
钓鱼贴??
|
63
wdssmq 2022-03-16 13:49:10 +08:00 1
JS 和 PHP 都会一点儿,同不理解楼主在不满啥。。
JSON 这东西,很多地方都能直接用这点儿很不错,偶尔的偶尔手动编辑下也还算方便。。 编辑频率高点儿就不如 yaml 了,但是使用时就要需要额外转换。。 JS 里,能用 v.a 的地方也可以用 v["a"]; PHP 里该用 $v->a 还是 $v["a"] 要仔细区分就很气人。。 |
64
skymei 2022-03-16 13:59:13 +08:00
你可别给 PHP 招黑了
|
65
JohnWangggg 2022-03-16 14:09:18 +08:00
2333333333333333333
|
66
icylogic 2022-03-16 14:19:51 +08:00 via iPhone
感觉 v 友攻击性有点强啊
|
67
arrando 2022-03-16 14:20:00 +08:00
。。。。。。
|
68
lancelock 2022-03-16 14:24:49 +08:00
这跟前端没关系,array 和 dictionary 的概念是普遍的,逻辑上本来就是不一样的结构,为什么要用一样的表示方法,混乱不堪。还有 json 只是数据交换格式,和浏览器兼容性又有什么关系
|
69
fkdtz 2022-03-16 14:25:52 +08:00 1
这。。。楼上喷的够多了,咱就不喷了
不过其实 PHP 的数组使用 HashTable 来实现的,只不过字典的 key 支持数组和字符串,也就是 PHP 中所谓的索引数组和关联数组。 所以在用 PHP 数组的时候,实际上都是在操作字典,这可能是楼主分不清大括号和花括号的原因之一。 |
70
raptor 2022-03-16 14:26:19 +08:00
这是 PHP 的锅,不是 JSON 的锅。
多学几种语言就知道了,只有 PHP 是字典和数组都用[]的,别的语言都是分别用{}和[]…… |
71
Envov 2022-03-16 14:33:47 +08:00
{1:{id:1,name:'dasdas'},2:{id:2,name:'dasdas'}}
[{id:1,name:'dasdas'},{id:2,name:'dasdas'}] |
72
summerLast 2022-03-16 14:35:46 +08:00
@lancelock 没有用过 php,但我好像可以理解为啥这样,哈哈哈 数组变成了字典的子集 如 [0:"a",1:"b",2:"c"] 前面 0 1 2 不写的话可以这样 ["a","b","c"] ,不知 php 是不是这样
|
73
summerLast 2022-03-16 14:40:42 +08:00
@summerLast 0 1 2 解释器自动填充,一个语法糖罢了,但是好像这个玩意也可以做成结构的载体 可以做成数组的载体 至于底层内存分配是连续的空间或是离散的则被屏蔽掉了,用起来简单了,但也让楼主分不清为啥这样了,哈哈哈哈
|
74
Hanggi 2022-03-16 14:43:17 +08:00
感觉挺好的,确实可以多学几种语言。
建议学 js 、然后底层语言和高性能各学一个、最好 python 也学一下,虽然多,但是可以慢慢来。 |
75
9c04C5dO01Sw5DNL 2022-03-16 14:44:20 +08:00
json 就是 json ,前端要用,后端也要用 (狗头
|
76
summerLast 2022-03-16 14:47:49 +08:00
对于这个语法糖 还是站 json 的写法,原因就是 当用数组'[]'时习惯的期望值是内存的连续空间 ,而使用结构'{}'时则更倾向与离散空间, 这个语法会导致思维的负担
|
77
lancelock 2022-03-16 14:52:24 +08:00
@summerLast php 里压根没有数组,本质都是字典,key 就是 index ,只是被隐藏了。js 也是这样的,不过 js 起码形式上做了区分,php 则完全没区分
|
78
markgor 2022-03-16 14:57:46 +08:00
@Rocketer #26 后面那句就不够严谨了....
数组形式可以通过 length 获取长度,对象形式没有 length 属性。 |
80
woomly 2022-03-16 15:08:34 +08:00
你这一来,这为本来就容易招黑的 PHP 更加雪上加霜...
|
81
summerLast 2022-03-16 15:10:15 +08:00
@lancelock 哈哈哈,这就是楼主为啥混乱了,数组 字典 明明是一个写法啊
|
82
FrankHB 2022-03-16 15:14:25 +08:00 11
@raptor 可能你学得语言还是不够多;你的说法显然不对: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) 。所以纯函数式语言不强调数组,是根本不需要。 |
83
FrankHB 2022-03-16 15:18:22 +08:00
@FrankHB 淦,合并回复的修改好像被吃了……
C++ 自带的数组和“字典”(std::unordered_map) 都能用 {} 初始化,而都用 [] 操作符访问元素。 |
84
guanhui07 2022-03-16 15:21:51 +08:00
PHP 在编程社区风评不好,和你这样的发言脱不了干系
|
85
kooze 2022-03-16 15:26:02 +08:00 3
难怪之前 phper 我要数组的时候,他给我:
{ "0": {...}, "1": {...}, "2": {...} } |
86
Felldeadbird 2022-03-16 15:28:10 +08:00
我猜 楼主应该是想表达 PHP 数组 定义爽。例如一个深层的多维数组 $a['b']['c']['d']['e'].... = 1;
换到 JSON 下,就要 { "a": { "c" : { "d" : { "e" { .... : 1 } } } } } |
88
jessun1990 2022-03-16 15:44:36 +08:00
@luodaoyi 我这里反而不喜欢,主要是缩进不能弄错,编辑文件有点麻烦。我觉得 toml 可能更好些。
|
89
peterjose 2022-03-16 15:47:16 +08:00
有个东西叫标准....
|
92
kunkunzhang 2022-03-16 16:32:38 +08:00
不是前端还是 php 的问题,是你的问题。。。。
|
93
MrYELiex 2022-03-16 16:36:05 +08:00
@nitmali 这么说显得你前端基础很差....Array 确实是继承 Object 但是 js 实现上本身有连续数组和非连续数组的概念 引擎实现上也会有对应的优化 不然就全部当对象去初始化变量好了 反正 a[1]也一样能用
|
95
JaguarJack 2022-03-16 16:40:36 +08:00
楼上的喷楼主就完事了!为什么要喷 PHP ?够睿智的。
|
96
zthxxx 2022-03-16 17:14:27 +08:00
|
97
asuraa 2022-03-16 17:21:58 +08:00
@jessun1990 toml 更好 哈哈 这个我也喜欢
|
98
brazz 2022-03-16 17:22:15 +08:00 1
为本来就黑的 php 雪上加霜
|
99
dongfang 2022-03-16 17:34:43 +08:00
PHP 程序员连数据结构的最基础的知识都不懂吗?
大一新生也知道什么是数组,什么是 map 吧??? |
100
keepeye 2022-03-16 17:36:34 +08:00 1
我怀疑你是来骗铜币的,但是我没有证据
|