PHP JSON 数据编码和解码
JSON 的使用场景:
- 数据表一个字段需要记录多个信息,如记录关于用户的其他信息
- 数据传输,如:API接口返回值、Ajax中实现异步加载
- 配置文件,如 composer.json 包管理配置文件
在 PHP 中使用 JSON:
JSON 使用最频繁的两个操作就是编码和解析数据,PHP 官方提供了以下 2 个函数实现这两个操作:
Encoding and Decoding
编码用于将数据绑定到特定格式。需要此过程来保持数据一致性。解码是一个反向过程,它将编码的数据还原回其原始形式。
PHP JSON Encode
使用 json_encode 将 PHP 的一些数据类型转换为 JSON 格式,函数包含 3 个参数,分别为:
- 将要编码的数据
- 带有 JSON encode 常量的选项可以反映对编码行为的影响
- 编码的深度限制
PHP 中预定义的 JSON 常量
JSON_FORCE_OBJECT
JSON_HEX_QUOT
JSON_HEX_TAG
JSON_HEX_AMP
JSON_HEX_APOS
JSON_INVALID_UTF8_IGNORE
JSON_INVALID_UTF8_SUBSTITUTE
JSON_NUMERIC_CHECK
JSON_PARTIAL_OUTPUT_ON_ERROR
JSON_PRESERVE_ZERO_FRACTION
JSON_PRETTY_PRINT
JSON_UNESCAPED_LINE_TERMINATORS
JSON_UNESCAPED_SLASHES
JSON_UNESCAPED_UNICODE
JSON_THROW_ON_ERROR
Example: PHP json_encode()
<?php
$input_array = array("zero","one","two");
//returns ["zero","one","two"] $str_json_format = json_encode($input_array);
print "JSON Formatted String:" . $str_json_format;
//returns {"0":"zero","1":"one","2":"two"} $obj_json_format = json_encode($input_array, JSON_FORCE_OBJECT);
print "<br/><br/>JSON Object:" . $obj_json_format;
//returns [ "zero", "one", "two" ] $strJsonFormat_with_space = json_encode($input_array, JSON_PRETTY_PRINT);
print "<br/><br/>JSON Formatted String with white space:" . $strJsonFormat_with_space;
PHP JSON Decode
这是 JSON encode 的反向操作,用于将 JSON 编码的数据转换为最初编码的 PHP数据类型。
json_decode 函数包含 4 个参数,分别为:
- 将要解析的 JSON 字符串
- 当该参数为
TRUE时,将返回 array 而非 object - 指定递归深度
- JSON 常量
JSON_BIGINT_AS_STRING,JSON_INVALID_UTF8_IGNORE,JSON_INVALID_UTF8_SUBSTITUTE,JSON_OBJECT_AS_ARRAY,JSON_THROW_ON_ERROR
返回值:
返回值为 TRUE, FALSE 和 NULL。
如果 json 无法被解码, 或者编码数据深度超过了递归限制的话,将会返回NULL
Example: PHP json_encode()
<?php
$str_json_array_decoded = json_decode($str_json_format);
print "<br/><br/>Resultant decoded array from JSON array:<br/>";
print "<PRE>";
print_r($str_json_array_decoded);
print "</PRE>"; $str_objJson_decoded = json_decode($obj_json_format);
print "<br/><br/>Resultant decoded object data from JSON object:<br/>";
print "<PRE>";
print_r($str_objJson_decoded);
print "</PRE>"; $str_jsonAry_decoded = json_decode($obj_json_format,true);
print "<br/><br/>Resultant decoded array data from JSON object:<br/>";
print "<PRE>";
print_r($str_jsonAry_decoded);
print "</PRE>";
注意:
- PHP 可以将任意数据类型转换为 JSON 格式,除了 resource data
- JSON 解码时,必须先去除掉字符串中的反斜杠 "\",不然会导致解析失败,可以使用
stripslashes对字符串进行处理后,再使用 json_decode 解析
如果需要解码的 JSON 数据中包含有反斜杠 "\",应该使用如下代码进行解码:
$obj = \json_decode(stripslashes($json));
PHP JSON 数据编码和解码的更多相关文章
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
- CocoaAsyncSocket网络通信使用之数据编码和解码(二)
CocoaAsyncSocket网络通信使用之数据编码和解码(二) 在上一篇CocoaAsyncSocket网络通信使用之tcp连接(一)中,我们已经利用CocoaAsyncSocket封装了自己的s ...
- javascript数据相关处理,序列化反序列化,数据编码与解码
对象序列化简而言之,将对象转为字符串.在数据的传输过程中,经常会使用到对象序列化. javascript中常用的对象序列化:JSON.stringify(); javascript中常用的对象反序列化 ...
- 51. ExtJs4之Ext.util.JSON编码和解码JSON对象
转自:https://blog.csdn.net/iteye_9439/article/details/82518158 1.decode() 该方法用于将符合JSON格式的String进行解码成为一 ...
- linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题
今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...
- python: json模块 --JSON编码和解码
json 源代码: Lib/json/__init__.py json.dump() import json numbers = [1, 2, 3, 4] with open('linshi.py', ...
- php讲中文json数据编码
<?php function show_jsonmsg($data){ if(is_array($data)){ $return = $data; }else{ $return = array( ...
- go对json的解析处理
json常用函数 func Marshal(v interface{}) ([]byte, error) //将各种数据类型转化为json数据类型 func Unmarshal (data []byt ...
- 【Go】 http webserver
示例1: package main import ( "fmt" "net/http" "encoding/json" ) var i in ...
- 15. Go 语言“避坑”与技巧
Go 语言"避坑"与技巧 任何编程语言都不是完美的,Go 语言也是如此.Go 语言的某些特性在使用时如果不注意,也会造成一些错误,我们习惯上将这些造成错误的设计称为"坑& ...
随机推荐
- C#/.NET/.NET Core优秀项目和框架2025年5月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的详细介绍.功能特点.使用方式以及部分功能 ...
- 突发,CSDN 崩了!程序员们开始慌了?
继前两天 B 站雪崩事件之后,国内最大的程序员站点 CSDN 居然也翻车了! 话说 CSDN 在程序员届的知名度甚至大于 B 站,我估计没有朋友没用过吧,来,先请大家用 4 个字来形容 CSDN _ ...
- ET5.0服务端架构
1: 整体架构图(图片来源 注意:现在的客户端与服务器的链接只有Realm和Gate.也就是说,客户端在第一次登陆时链接Realm,然后链接Gate,但是不连接Map.Map与Client之间的通讯完 ...
- 本地搭建一个对嘴AI工具
图片+音频=说话视频 这就是本次需要实现的功能. 一:环境 window10电脑(GPU越大越好,我的是专享8G,有点小了). Python 3.11.9. CUDA Version: 12.9.(驱 ...
- HarmonyOS NEXT仓颉开发语言实战案例:健身App
各位好,今日分享一个健身app的首页: 这个页面看起比之前的案例要稍微复杂一些,主要在于顶部部分,有重叠的背景,还有偏移的部分.重叠布局可以使用Stack容器实现,超出容器范围的偏移可以使用负数间距来 ...
- MySQL 04 深入浅出索引(上)
索引的常见模型 实现索引的方式有很多种,这里先介绍三种常见结构:哈希表.有序数组和搜索树. 哈希表:只适用于只有等值查询的场景. 有序数组:在等值查询和范围查询场景中的性能都非常优秀,但是在更新数据的 ...
- Windows 下安装RabbitMQ
下载并安装erlang原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang.下载地址:http://www.erlang.org/down ...
- Layui 更新Table 表格内容的值
$.ajax({ //请求方式 type: "POST", //请求地址 url: "/", //数据,json字符串 data: { }, //请求成功 su ...
- C# 关于WinForm 中的自带控件 chart1 竖形统计图 使用。
百度查了好久都每找到自己想要的效果 经过一天头痛的摸索终于弄出来了,关键在于Points /// <summary> /// 更新图像图 /// </su ...
- wps office定制化 自定义右侧面板 关联批注
效果 核心思想 监听onWindowSelectionChange事件,获取当前光标位置,然后对比高连位置 判断是否选在区域内. 若是则激活右侧对应的高亮面板 核心代码 index.vue <s ...