php中json_decode()和json_encode()的使用方法

php中json_decode()和json_encode()的使用方法

json_decode对JSON格式的字符串进行编码而json_encode对变量进行 JSON 编码,需要的朋友可以参考下
1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 对 JSON 格式的字符串进行编码

说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量

参数

json
待解码的 json string 格式的字符串。

assoc
当该参数为 TRUE 时,将返回 array 而非 object 。


返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.

范例

Example #1 json_decode() 的例子
复制代码 代码如下:

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>

上例将输出:
复制代码 代码如下:

object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

复制代码 代码如下:

$data='[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]';
echo json_decode($data);

结果为:
复制代码 代码如下:

Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下
复制代码 代码如下:

echo json_decode($data,true);

结果:
复制代码 代码如下:

Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 对变量进行 JSON 编码

Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式

Report a bug 参数

value
待编码的 value ,除了resource 类型之外,可以为任何数据类型

该函数只能接受 UTF-8 编码的数据

options
由 以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.

Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。

Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.


Report a bug 范例

Example #1 A json_encode() 的例子
复制代码 代码如下:

<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr);
?>

以上例程会输出:
复制代码 代码如下:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Example #2 json_encode() 函数中 options 参数的用法
复制代码 代码如下:

<?php
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");

echo "Normal: ", json_encode($a), "\n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";

$b = array();

echo "Empty array output as array: ", json_encode($b), "\n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";

$c = array(array(1,2,3));

echo "Non-associative array output as array: ", json_encode($c), "\n";
echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";

$d = array('foo' => 'bar', 'baz' => 'long');

echo "Associative array always output as object: ", json_encode($d), "\n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>

以上例程会输出:
复制代码 代码如下:

Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"]
Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"]
All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]

Empty array output as array: []
Empty array output as object: {}

Non-associative array output as array: [[1,2,3]]
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}

Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}

Example #3 连续与非连续数组示例
复制代码 代码如下:

<?php
echo "连续数组".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);

echo PHP_EOL."非连续数组".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);

echo PHP_EOL."删除一个连续数组值的方式产生的非连续数组".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>

以上例程会输出:
复制代码 代码如下:

连续数组
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

非连续数组
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"

删除一个连续数组值的方式产生的非连续数组
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"

复制代码 代码如下:

$obj->Name= 'a1';$obj->Number ='123';
$obj->Contno= '000';
echo json_encode($obj);

结果为:
复制代码 代码如下:

{"Name":"a1",
"Number":"123",
"Contno":"000"
}

可以看出json_encode()和json_decode()是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。

转载于:https://www.cnblogs.com/shsgl/p/5207359.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取我的文档“路径

From: http://blog.csdn.net/chinabinlang/article/details/8637362 方法一&#xff1a;来自网络; CString getMyDoc() // 获取“我的文档”路径 {TCHAR m_lpszDefaultDir[MAX_PATH] {0};TCHAR szDocument[MAX_PATH] {0};memset(m_lpszDefaultDir, 0, _MAX_PATH);LPITEMIDLI…

让您变的更智慧 秘笈145条(上)

钱多钱少&#xff0c;常有就好&#xff01;人老人少&#xff0c;健康就好&#xff01;家贫家富&#xff0c;和睦就好。生活其实很简单&#xff0c;过了今天就是明天&#xff0c;重要的每个今天和明天都要智慧快乐得活着。 1. 精神失常的疯子不可怕&#xff0c;可怕的是精神正常…

[Redux/Mobx] 说说redux的优缺点分别是什么?

[Redux/Mobx] 说说redux的优缺点分别是什么&#xff1f; 优点 Redux轻量&#xff0c;生态丰富&#xff0c;可以结合流行的redux-thunk、redux-saga等进行使用Redux的写法比较固定&#xff0c;团队应用中风格比较稳定&#xff0c;提高协作中的可维护性因为Redux中的reducer更新…

Bootstrap(七):CSS--图片

1.基本样式 主要四个样式类&#xff1a; 设置布局 .img-responsive : 可以让图片支持响应式布局&#xff0c;从而让图片在其父元素中更好的缩放&#xff1b; 设置形状 .img-rounded &#xff1a; 设置图片为圆角&#xff1b; 设置形状 .img-circle &#xff1a; 设置图片为圆形…

rtsp摘要认证协议(Response计算方法)

From&#xff1a; http://m.blog.csdn.net/blog/WTBEE/9001859 1. rtsp摘要认证协议流程 RTSP协议&#xff0c;全称Real Time Streaming Protocol&#xff0c;是应用层的协议&#xff0c;它主要实现的功能是传输并控制具有实时特性的媒体流&#xff0c;如音频&#xff08;Audio…

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别&#xff1f; 1&#xff1a;vuex的异步数据不需要使用到中件间&#xff0c;redux需要 2&#xff1a;vuex可以直接commit&#xff0c;action不是必须的&#xff0c;redux是必须的 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…

android 带图片的文本框

基本原理 自定义一个IconTextView类继承自TextView&#xff0c;添加iconsrc属性&#xff0c;表示图片。 重新onDraw方法&#xff0c;将图片绘制到textVIew前面,然后将textView右移。 废话不多说了&#xff0c;直接代码就明白。 package com.zb;import android.content.Context;…

【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解

From: http://softbbs.zol.com.cn/1/32_7991.html 每天都能看到有不少网友在回复论坛之前发布的一篇破解WiFi密码的帖子&#xff0c;并伴随各种疑问。今天流云就为大家准备一篇实战型的文章吧&#xff0c;详细图文从思维CDlinux U盘启动到中文设置&#xff0c;如何进行路由SSID…

整理Linux查看系统日志的一些经常使用命令

整理Linux查看系统日志的一些经常使用命令 last-a 把从何处登入系统的主机名称或ip地址&#xff0c;显示在最后一行。-d 指定记录文件。指定记录文件。将IP地址转换成主机名称。-f <记录文件>  指定记录文件。-n <显示列数>或-<显示列数>  设置列出名单的显…

[Redux/Mobx] 在Redux中怎么发起网络请求?

[Redux/Mobx] 在Redux中怎么发起网络请求&#xff1f; 如果单纯的使用Redux&#xff0c;因为redux的actionCreator返回一个plain object&#xff0c;所以不能在actionCreator中发起网络请求&#xff1b;reducer是一个纯函数&#xff0c;不能有副作用&#xff0c;所以也不能有异…

判断整数序列是不是二元查找树的后序遍历结果

题目&#xff1a;输入一个整数数组&#xff0c;判断该数组是不是某二元查找树的后序遍历的结果。 如果是返回true&#xff0c;否则返回false。 例如输入5、7、6、9、11、10、8&#xff0c;由于这一整数序列是如下树的后序遍历结果&#xff1a; 8 / \ 6 10 / \ / \ 5 7 9…

iOS 从相机或相册获取图片并裁剪

/load user image - (void)UesrImageClicked { UIActionSheet *sheet; // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { sheet [[UIActionSheet alloc] initWithTitle:"选择图像" delega…

【EWSA无线路由密码破解工具 中文特别版下载】含教程及字典(弱口令生日特殊符号等)

From: http://softbbs.zol.com.cn/1/32_8011.html Elcomsoft Wireless Security Auditor简称EWSA,是一款极为强悍的路由密码破解工具&#xff0c;支持CPU、GPU调用破解&#xff0c;速度比但CPU破解厉害很多&#xff0c;加上此次分享的EWSA字典下载&#xff0c;可以帮助大家更好…

[Redux/Mobx] 什么是单一数据源?

[Redux/Mobx] 什么是单一数据源&#xff1f; Redux的store.getState只能得到一个数据源&#xff0c;通常这是一个对象&#xff0c;通常这也是React App中的唯一Redux数据源&#xff0c;这个state对象中的属性值通过combineReducer整合了子Reducer返回的state的值 个人简介 …

VMware vSphere简介

vSphere是VMware推出的基于云的新一代数据中心虚拟化套件&#xff0c;提供了虚拟化基础架构、高可用性、集中管理、监控等一整套解决方案 现VMware vSphere 版本为5.0&#xff0c;组件如下&#xff1a; ESXi&#xff1a;物理服务器的虚拟化层&#xff0c;它将处理器、内存、存储…

RESTful API 设计指南 (转)

RESTful API 设计指南 2016-02-23 ImportNew(点击上方公号&#xff0c;可快速关注) 作者&#xff1a;阮一峰 链接&#xff1a;http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序&#xff0c;分为前端和后端两个部分。当前的发展趋势&#xff0c;就是前端设…

find:查找文件或目录

From: http://yhj1065.blog.163.com/blog/static/198002172007111810502948/ 功能说明&#xff1a; find指令可以在系统中查找你想要的任何文件或目录&#xff0c;你可以通过不同的参数来查找你想要的。该指令也是系统管理员最常用、最强大、最方便的查找文件和目录的指令。 基…

[Redux/Mobx] 为什么redux能做到局部渲染呢?

[Redux/Mobx] 为什么redux能做到局部渲染呢&#xff1f; reducer从根往最子级的reducer中间各层总是返回一个新的state&#xff0c;这样的话&#xff0c;就会引起组件的大范围的re-render&#xff0c;但是这是可避免的 合理的利用selector&#xff1a;在connect函数中的第一个…

[zz]Linux操作系统下三种配置环境变量的方法

个人的总结: 设置了/etc/profile 和 ~/.bashrc 之后&#xff0c;使用了source 命令&#xff0c;是可以echo添加的变量&#xff0c;但是用getenv读不出来&#xff0c;然后使用env命令也显示不出来&#xff0c;是因为没有export!! ---------------------------------------------…

poj 2976 基础01分数规划

这个题算是01分数规划的最基本的应用了&#xff0c; 01分数规划是给你n对数(a1, b1)....(an, bn), 然后让你选择一些数对&#xff0c; 使得sigma(ai)/sigma(bi)最大。这里附上讲解一份&#xff0c; http://blog.csdn.net/hhaile/article/details/8883652&#xff0c; 代码如下&…