
兄弟们,前几天被个小事儿折腾得够呛。 我在搞一个内部的小工具,数据是在后端抓出来的,存成数组(Array)那是顺理成章的事儿。但是等我把数据怼给前端那个新来的小伙子的时...
兄弟们,前几天被个小事儿折腾得够呛。
我在搞一个内部的小工具,数据是在后端抓出来的,存成数组(Array)那是顺理成章的事儿。但是等我把数据怼给前端那个新来的小伙子的时候,他直接就给我扔回来了,说我传的格式不对,他要的得是“纯”的JSON格式,不是他妈数组。
我当时心想,数组就数组呗,不都是数据吗?搞得这么麻烦干结果被他鄙视了一番。为了找回面子,我决定自己动手,彻底搞明白数组和JSON之间的格式转换,到底有啥门道。
我立马打开我常用的编辑器,琢磨着这事儿肯定有个现成的轮子。一通翻阅资料,果然,找到了一个叫 jsonencode 的好东西。这名字一听就是专门干这活儿的,把数组变成JSON,简单粗暴。
我的实践思路很简单:既然要转,那数组有几种常见的形态,我就得挨个儿试试,看看 jsonencode 对不同形态的数组,到底是咋处理的。

我先拿最简单的、那种没有名字(键)的数组开刀。就像咱们平时排个队,从1号排到3号,只有位置,没有名字那种。
我把代码敲了进去,就弄了几个数字:
jsonencode。["苹果", "香蕉", "橘子"]。我发现,对于这种纯粹按照顺序排列的数组,它就给转换成了一个JSON的数组。 方括号包裹着,跟我心里想的差不多。

光试简单的没意思,平时数据里哪有那么多只有顺序没有名字的。更多的是那种,有名字对应着值的数组,就像个小字典一样。
这回我给数组里的每个值都起了个名,也就是设置了“键”:
jsonencode 里头跑一圈。{"姓名": "老王", "年龄": 40}。这回我很意外,它没有用方括号,而是用了花括号 包起来了!这不就是前端小伙子天天喊的那个JSON对象吗?
我悟了,原来 jsonencode 会自己判断数组的结构。如果发现你有明确的“名字”(键),它就会很识趣地给你转成一个JSON对象。这个发现让我觉得这工具挺聪明的。
前面两个都是单条数据,但实际业务里,我不可能只传一条数据过去。都是一堆一堆的记录,每条记录里又包含好几个字段。这就是所谓的“数组里面套着数组”。
我决定搞个复杂点的,模拟查数据库出来的那种多条记录:
[{"ID": 1, "商品": "T恤"}, {"ID": 2, "商品": "裤子"}]。这回的结果是 方括号 包裹着 花括号 。完美,这才是业务里最常见的那种“JSON列表”。
这三个实例跑下来,我彻底明白了这玩意儿是怎么运作的,心里踏实多了。 jsonencode 的用法巨简单,就是把数组丢进去就行。
真正要注意的是:你给它什么形态的数组,它就吐出什么形态的JSON。
[{...}, {...}]。以后前端那个小伙子再跟我提JSON格式的问题,我直接给他怼回去,数据格式我说了算,让他自己去处理。这回实践,没花多少时间,但确实把一个模糊的概念彻底搞明白了,值了!