JSON 的使用场景:

  1. 数据表一个字段需要记录多个信息,如记录关于用户的其他信息
  2. 数据传输,如:API接口返回值、Ajax中实现异步加载
  3. 配置文件,如 composer.json 包管理配置文件

在 PHP 中使用 JSON:

JSON 使用最频繁的两个操作就是编码和解析数据,PHP 官方提供了以下 2 个函数实现这两个操作:

  1. json_encode()
  2. json_decode()

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_STRINGJSON_INVALID_UTF8_IGNOREJSON_INVALID_UTF8_SUBSTITUTEJSON_OBJECT_AS_ARRAYJSON_THROW_ON_ERROR

返回值:

返回值为 TRUEFALSE 和 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>";

注意:

  1. PHP 可以将任意数据类型转换为 JSON 格式,除了 resource data
  2. JSON 解码时,必须先去除掉字符串中的反斜杠 "\",不然会导致解析失败,可以使用 stripslashes 对字符串进行处理后,再使用 json_decode 解析

如果需要解码的 JSON 数据中包含有反斜杠 "\",应该使用如下代码进行解码:

$obj = \json_decode(stripslashes($json)); 

PHP JSON 数据编码和解码的更多相关文章

  1. Python -- Json 数据编码及解析

    Python  --  Json  数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...

  2. CocoaAsyncSocket网络通信使用之数据编码和解码(二)

    CocoaAsyncSocket网络通信使用之数据编码和解码(二) 在上一篇CocoaAsyncSocket网络通信使用之tcp连接(一)中,我们已经利用CocoaAsyncSocket封装了自己的s ...

  3. javascript数据相关处理,序列化反序列化,数据编码与解码

    对象序列化简而言之,将对象转为字符串.在数据的传输过程中,经常会使用到对象序列化. javascript中常用的对象序列化:JSON.stringify(); javascript中常用的对象反序列化 ...

  4. 51. ExtJs4之Ext.util.JSON编码和解码JSON对象

    转自:https://blog.csdn.net/iteye_9439/article/details/82518158 1.decode() 该方法用于将符合JSON格式的String进行解码成为一 ...

  5. linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题

    今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...

  6. python: json模块 --JSON编码和解码

    json 源代码: Lib/json/__init__.py json.dump() import json numbers = [1, 2, 3, 4] with open('linshi.py', ...

  7. php讲中文json数据编码

    <?php function show_jsonmsg($data){ if(is_array($data)){ $return = $data; }else{ $return = array( ...

  8. go对json的解析处理

    json常用函数 func Marshal(v interface{}) ([]byte, error) //将各种数据类型转化为json数据类型 func Unmarshal (data []byt ...

  9. 【Go】 http webserver

    示例1: package main import ( "fmt" "net/http" "encoding/json" ) var i in ...

  10. 15. Go 语言“避坑”与技巧

    Go 语言"避坑"与技巧 任何编程语言都不是完美的,Go 语言也是如此.Go 语言的某些特性在使用时如果不注意,也会造成一些错误,我们习惯上将这些造成错误的设计称为"坑& ...

随机推荐

  1. C#/.NET/.NET Core优秀项目和框架2025年5月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的详细介绍.功能特点.使用方式以及部分功能 ...

  2. 突发,CSDN 崩了!程序员们开始慌了?

    继前两天 B 站雪崩事件之后,国内最大的程序员站点 CSDN 居然也翻车了! 话说 CSDN 在程序员届的知名度甚至大于 B 站,我估计没有朋友没用过吧,来,先请大家用 4 个字来形容 CSDN _ ...

  3. ET5.0服务端架构

    1: 整体架构图(图片来源 注意:现在的客户端与服务器的链接只有Realm和Gate.也就是说,客户端在第一次登陆时链接Realm,然后链接Gate,但是不连接Map.Map与Client之间的通讯完 ...

  4. 本地搭建一个对嘴AI工具

    图片+音频=说话视频 这就是本次需要实现的功能. 一:环境 window10电脑(GPU越大越好,我的是专享8G,有点小了). Python 3.11.9. CUDA Version: 12.9.(驱 ...

  5. HarmonyOS NEXT仓颉开发语言实战案例:健身App

    各位好,今日分享一个健身app的首页: 这个页面看起比之前的案例要稍微复杂一些,主要在于顶部部分,有重叠的背景,还有偏移的部分.重叠布局可以使用Stack容器实现,超出容器范围的偏移可以使用负数间距来 ...

  6. MySQL 04 深入浅出索引(上)

    索引的常见模型 实现索引的方式有很多种,这里先介绍三种常见结构:哈希表.有序数组和搜索树. 哈希表:只适用于只有等值查询的场景. 有序数组:在等值查询和范围查询场景中的性能都非常优秀,但是在更新数据的 ...

  7. Windows 下安装RabbitMQ

    下载并安装erlang原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang.下载地址:http://www.erlang.org/down ...

  8. Layui 更新Table 表格内容的值

    $.ajax({ //请求方式 type: "POST", //请求地址 url: "/", //数据,json字符串 data: { }, //请求成功 su ...

  9. C# 关于WinForm 中的自带控件 chart1 竖形统计图 使用。

    百度查了好久都每找到自己想要的效果 经过一天头痛的摸索终于弄出来了,关键在于Points /// <summary>        /// 更新图像图        /// </su ...

  10. wps office定制化 自定义右侧面板 关联批注

    效果 核心思想 监听onWindowSelectionChange事件,获取当前光标位置,然后对比高连位置 判断是否选在区域内. 若是则激活右侧对应的高亮面板 核心代码 index.vue <s ...