返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php中json序列化为[]的弊端是什么
  • 532
分享到

php中json序列化为[]的弊端是什么

2023-07-05 14:07:39 532人浏览 薄情痞子
摘要

这篇文章主要介绍了PHP中JSON序列化为[]的弊端是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php中json序列化为[]的弊端是什么文章都会有所收获,下面我们一起来看看吧。在 PHP 中表示空的ma

这篇文章主要介绍了PHPJSON序列化为[]的弊端是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇phpjson序列化为[]的弊端是什么文章都会有所收获,下面我们一起来看看吧。

在 PHP 中表示空的map或空数组都是以空数组形式,在转化为json数据时,会将空数组统一 json 序列化成 [],这样就存在一个类型问题。

以前我们在与前端交互时一般是与弱类型语言js交互,对于空数组转成 {} 还是 [] 区别不大。

但随着APP的流行,PHP很多时候不是跟浏览器端的JS交互,而是跟Java和ObjC这样的静态类型语言交互,返回值的类型定义,就很重要了,举个例子

$ret1 = [     'choices' => ['鱼香肉丝', '宫保鸡丁'],    'answers' => [        '张三' => 0,        '李四' => 1,        '赵云' => 0,    ],  ];$ret2 = [     'choices' => [],     'answers' => [], ];echo json_encode($ret1) . "\n";echo json_encode($ret2) . "\n";

输出

{"choices":["\u9c7c\u9999\u8089\u4e1d","\u5bab\u4fdd\u9e21\u4e01"],"answers":{"\u5f20\u4e09":0,"\u674e\u56db":1,"\u8d75\u4e91":0}}{"choices":[],"answers":[]}

客户端在定义这个model的时候,可能是这样定义的

class ResultDTO {    lateinit var choices: List<String>    lateinit var answers: Map<String, Int>}

当返回ret1的时候,一切顺风顺水,皆大欢喜。如果返回ret2呢,客户端抗议了

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token

原因是什么呢?PHP的json_encode面对一个空的array的时候,它很为难,它不知道应该当它是list还是map,所以它只能一刀切,认为它就是list,于是客户端就不高兴了。解决办法不是没有,依然是强制转换。

解决方法一:[推荐]

$arr = [     'choices' => [],    'answers' => new \ArrayObject([])];$jsonRet = json_encode($arr);print_r($jsonRet);

使用 ArrayObject 还可以像数组一样操作数据,方便很多

解决方法二:

$ret2 = [    'choices' => [],    'answers' => (object) [],];

但是这样就带来一个问题,如果answers不是写死的,而是某个api的返回值,你并不确定它是不是会返回空的,它也没有义务帮你cast成object,因为JSON序列化是跟前端交互的事情,不应该放到后端service层面解决。那么你只能自己动手了,手动把返回值中可能出现空map的地方,全部强制转换一遍。

PHP的关联数组的确很强大,算法设计的也不错,性能也很好,但是它不是没有代价的,上面的例子算是其中一个。如果PHP也像其它语言一样,区分map和list,可能会省事一些,毕竟区分{}和[],对程序员来说并不会增加很多学习成本。

关于“php中json序列化为[]的弊端是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“php中json序列化为[]的弊端是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网PHP编程频道。

--结束END--

本文标题: php中json序列化为[]的弊端是什么

本文链接: https://lsjlt.com/news/352100.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php中json序列化为[]的弊端是什么
    这篇文章主要介绍了php中json序列化为[]的弊端是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php中json序列化为[]的弊端是什么文章都会有所收获,下面我们一起来看看吧。在 PHP 中表示空的ma...
    99+
    2023-07-05
  • php中json 序列化为 [] 的弊端
    目录解决方法一:[推荐]解决方法二:在 PHP 中表示空的map或空数组都是以空数组形式,在转化为json数据时,会将空数组统一 json 序列化成 ​​[]​​,这样就存...
    99+
    2023-03-20
    php 序列化和json性能 php获取json php数组组合json
  • PHP中的序列化和反序列化是什么
    这篇“PHP中的序列化和反序列化是什么”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“PHP中的序列化和反序列化是什么”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让...
    99+
    2023-06-06
  • python序列化json数据的方法是什么
    这篇“python序列化json数据的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python序列化json数据...
    99+
    2023-06-27
  • Redis中的JSON序列化和PHP中的使用
    Redis是一款高效的内存缓存数据库,因其快速的读写能力和支持多种数据结构的特性,已经成为许多开发者常用的工具。而其中的JSON序列化功能,可以方便我们将复杂的数据结构转换成可读性好的JSON格式,实现更好的交互与存储。在这篇文章中,我们将...
    99+
    2023-05-16
    PHP redis JSON序列化
  • Golang中Json的序列化和反序列化怎么使用
    这篇文章主要介绍“Golang中Json的序列化和反序列化怎么使用”,在日常操作中,相信很多人在Golang中Json的序列化和反序列化怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang中Js...
    99+
    2023-06-30
  • Golang中Json的序列化和反序列化的使用
    目录 JSON:创建格式:基本数据类型序列化:map序列化:切片序列化:反序列化为结构体:反序列化为map:反序列化为切片: JSON: JSON(JavaScr...
    99+
    2024-04-02
  • 在Python 中将类对象序列化为JSON
    目录1. 引言2. 举个栗子3. 解决方案3.1 使用 json.dumps() 和 __dict__3.2 实现 __str__ 和 __repr__3.3 实现 JSON enc...
    99+
    2024-04-02
  • JavaScript中怎么用JSON来序列化与反序列化
    小编给大家分享一下JavaScript中怎么用JSON来序列化与反序列化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用JSON...
    99+
    2024-04-02
  • java为什么序列化
    序列化是一种用来处理对象流的机制。 (推荐学习:java课程)所谓对象流:就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于...
    99+
    2015-12-09
    java教程 java
  • json格式的字符串序列化和反序列化的高级用法是什么
    json格式的字符串序列化和反序列化的高级用法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(1) 仅仅将指定属性对应的值序列化成字符串:var ...
    99+
    2023-06-04
  • 在Python中怎么将类对象序列化为JSON
    本文小编为大家详细介绍“在Python中怎么将类对象序列化为JSON”,内容详细,步骤清晰,细节处理妥当,希望这篇“在Python中怎么将类对象序列化为JSON”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. ...
    99+
    2023-06-29
  • java中序列化与反序列化的作用是什么
    Java中的序列化和反序列化是用来实现对象的持久化存储和网络传输的机制。序列化的作用:1. 对象持久化存储:将Java对象转换为字节...
    99+
    2023-09-15
    java
  • 怎么在python中序列化JSON
    今天就跟大家聊聊有关怎么在python中序列化JSON,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
  • python中json序列化的东东
    之所以写这个因为自己总是弄混了,容易弄错,记下来有事没事看看   序列化是指把变量从内存中变成可存储或传输的过程称之为序列化用(使用dump或者dumps),把变量内容从序列化的对象重新读到 内存里称之为反序列化(使用load或者load...
    99+
    2023-01-30
    序列化 python json
  • Python类对象的JSON序列化处理方法是什么
    这篇文章主要介绍“Python类对象的JSON序列化处理方法是什么”,在日常操作中,相信很多人在Python类对象的JSON序列化处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • 一文带你吃透什么是PHP中的序列化
    目录1. php 中的序列化2. 序列化和反序列化过程中的钩子3. 如何使用序列化与外部服务通信4. 序列化实例 - Laravel Queue5. 最后1. php 中的序列化 在...
    99+
    2023-05-18
    PHP序列化定义 PHP序列化应用 PHP序列化
  • 实现JSON序列化和反序列化的方法在Golang中
    Golang中JSON序列化和反序列化的实现方式 JSON (JavaScript Object Notation) 是一种常用的数据交换格式,它以文本的形式表示结构化数据。在Golang中,我们可以使用内置...
    99+
    2024-01-29
    Golang 序列化 JSON 实现方式 反序列化
  • Python序列化和反序列化的作用是什么
    Python序列化和反序列化的作用是实现数据的持久化存储和传输。序列化是将Python对象转换为字节流或字符串的过程,使得对象可以被...
    99+
    2023-08-14
    python
  • Java对象的序列化和反序列化是什么
    这篇文章主要介绍了Java对象的序列化和反序列化是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java对象的序列化和反序列化是什么文章都会有所收获,下面我们一起来看看吧。Java 对象的序列化和反序列化是...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作