PHP JSON数据处理实例程序用法

json_encode() ,PHP数据->JSON

json_encode只有一个参数,参数除了resource 类型之外,可以为任何数据类型。但是我们一般是传入数组,如下例子

 代码如下 复制代码

$arr = array(
    "name" => "manson",
    "age" => 23,
    "sex" => 1
);
 
$json_str = json_encode($arr);
var_dump($json_str);

得出的是json字符串

{"name":"manson","age":23,"sex":1}

这时一般是把转换后的字符串输出到前端处理,常用于ajax做数据交互,或者一些前端模板的数据输出。json_encode需要注意的一个问题就是中文的编码问题,假如PHP页面的编码是非utf-8的,在json_encode之前,必须把有中文内容的部分转换成utf-8编码,否则输出到前端的时候会乱码。解决的方法网上有很多,这里举一个简单的编码转换例子

 

 代码如下 复制代码
$arr = array(
    "name" => "张三",
    "age" => 23,
    "sex" => 1
);
 
$arr['name'] = iconv("gbk","utf-8",$arr['name']);
 
$json_str = json_encode($arr);

PHP数据

json_decode有两个参数,第一个参数是待解码的json字符串,传入的一定要是一个合符规范的json格式,其实json_decode就是json_encode的逆过程

 代码如下 复制代码

$json_str = '{"name":"manson","age":23,"sex":1}';
 
$arr = json_decode($json_str,true);
var_dump($arr);

这里需要注意的是,json_decode的第2个参数传的是true,意思是解码后返回数组格式,假如传false或是不传第2个参数,解码后将返回对象格式,例如上面的代码返回对象格式是

 

 代码如下 复制代码
object(stdClass)#1 (3) {
  ["name"]=>
  string(6) "manson"
  ["age"]=>
  int(23)
  ["sex"]=>
  int(1)
}

对象格式相对于数组格式来说,取得对应数据的难度会增大,特别对于多层级数据结构,还是转换成数组形式为好,也就是json_decode第2个参数记得传true。

处理提交的JSON数据

POST方式(GET方式也要注意)向PHP提交了一个JSON数据,比如:

 代码如下 复制代码

{"a":1,"b":2}

在PHP中取出这个数据:

 代码如下 复制代码

$s=$_POST['data'] ;//or $_GET['data']

然后这个串取出后是被转义的:

 代码如下 复制代码

 {"a":1,"b":2}

如果直接调用:

 代码如下 复制代码

$obj = json_decode($s); 

print_r($obj); 
echo $obj->a;

 

 是错误的,会报告错误.

如果$s直接定义:

 代码如下 复制代码

$s='{"a":1,"b":2}';

则没有问题.

所以在PHP中处理JSON时需要进行一下转义处理:

 代码如下 复制代码

$s=stripslashes($_POST['data']) ;

这样再进行json解码就可以了.

PHP 获取接口内容

假设接口文件页面为:/api.php?action=open_getBlogList&only_recommend=1&limit=5 ,那么我们可以使用下面语句获取这个接口文件内容:

 代码如下 复制代码
$handle = fopen("/api.php?action=open_getBlogList&only_recommend=1&limit=5","rb");
$content = "";
while (!feof($handle)) {
    $content .= fread($handle, 10000);
}
fclose($handle);

这样 content 保存的就是 JSON api 内容。

PHP 解析 JSON 并显示
原始的内容是无法直接调用的,必须被 PHP 进行进一步处理,才能被调用显示在网页中。在 PHP 5.2 及后续版本中,使用 json_decode() 函数来解析 JSON 数据,将其转换成 PHP 可以调用的数据格式。例如:

 代码如下 复制代码
$content = json_decode($content);

解析之后呢,我们就可以按照 PHP 中调用数组数据的方法一样的调用 JSON 中的数据。这个调用方法需要按照具体的 JSON 数据格式来写,演示请看下面。关于 json_decode 函数的使用,具体看 PHP 手册,这里不再赘述:http://php.net/manual/en/function.json-decode.php

实战 api

细心的朋友会发现 潜行者m 博客的边栏最下面多了一个“友文推荐”模块,里面推荐了一些琼台博客的文章。

友文推荐是琼台博客倡议的一种博客之间交流方式,比传统的友情链接更有效,同时实现了博客内容互补。由于琼台博客的博客程序是他自己本人编写的,所以他提供了 JSON api 接口,可以获取到最新的可推荐的文章。

本人使用 PHP 获取这个 JSON 接口,然后输出到自己博客的边栏中,下面来实战操作一下。

第一步,查看 api 调用方式

根据文档,我使用了 /api.php?action=open_getBlogList&only_recommend=1&limit=5 这样的参数,意思就是调用五条他推荐的文章。

第二步,获取 api 结构数据
很简单,上面说过了,具体代码如下:

 代码如下 复制代码
$handle = fopen("/api.php?action=open_getBlogList&only_recommend=1&limit=5","rb");
$content = "";
while (!feof($handle)) {
    $content .= fread($handle, 10000);
}

fclose($handle);先打开这数据文件,然后把所有内容保存到 content 变量中,因为可以肯定 api 数据不会超过 10000个字符,所以用 10000 作为 fread 函数的第二个参数。这样,api 返回的 JSON 数据就保存在了 content 变量中。

第三步,解析并输出内容
使用下面代码解析数据,然后调用输出

 代码如下 复制代码

$content = json_decode($content);
foreach ($content->data as $key) {
    echo '<li><a target="_blank" href="'.$key->b_url.'">'.$key->b_title.'</a></li>';
}

首先对 content 变量中的 JSON  数据处理,然后变成 PHP 可以调用的数据,再使用 foreach 遍历输出这五条内容,按照我需要的 HTML 格式,将内容插入进去即可。

时间: 2024-10-27 17:57:43

PHP JSON数据处理实例程序用法的相关文章

JavaScript转换与解析JSON方法实例详解_javascript技巧

本文实例讲述了JavaScript转换与解析JSON方法.分享给大家供大家参考,具体如下: json格式数据如下: var json = { 'jquery': [{ "id": "1", "type": "ASP.NET", "title": "JSON全解析"}] } alert(json.jquery[0].id); alert(json.jquery[0].type); aler

asp用户注册实例程序

asp教程用户注册实例程序 建立access数据库教程db1.mdb,在其中建立数据表user,字段分别为:u_uid(自动),u_user(用户名:文本型),u_pass(密码:文本型) 四.建立接收register.asp中发送过来的表单数据,并插入到数据表user中的注册成功显示页面: <% '字符串连接数据库的方法 set conn=server.createobject("adodb.connection") conn.open "driver=driver

asp 电子邮箱email验证实例程序

 电子邮箱email验证实例程序 function IsValidEmail(email) dim names, name, i, c 'Check for valid syntax in an email address. IsValidEmail = true names = Split(email, "@") if UBound(names) <> 1 then    IsValidEmail = false    exit function end if for e

Python类属性与实例属性用法分析

  本文实例分析了Python类属性与实例属性用法.分享给大家供大家参考.具体如下: 类属性:类名.属性名 实例属性:实例.属性名 ? 1 2 3 4 5 6 7 8 9 10 11 12 >>> class test(): ... ver=1 ... >>> a=test() >>> test.x=8 >>> a.__dict__ {} >>> a.x 8 >>> a.x=9 >>&g

《Java语言导学(原书第6版)》一1.2 “Hello World!”实例程序

1.2 "Hello World!"实例程序 本节详细介绍编译和运行"Hello World!"实例程序的指令.1.2.1节介绍利用集成开发环境NetBeans IDE开发该程序的过程.NetBeans IDE在Java平台上运行,也就是说可在任何配置了JDK的操作系统上运行NetBeans IDE,包括Microsoft Windows.Solaris.Linux和OS X.建议尽可能使用NetBeans IDE取代命令行.1.2.2节和1.2.3节依次介绍不使用

《Java语言导学(原书第6版)》一一1.2 “Hello World!”实例程序

1.2 "Hello World!"实例程序 本节详细介绍编译和运行"Hello World!"实例程序的指令.1.2.1节介绍利用集成开发环境NetBeans IDE开发该程序的过程.NetBeans IDE在Java平台上运行,也就是说可在任何配置了JDK的操作系统上运行NetBeans IDE,包括Microsoft Windows.Solaris.Linux和OS X.建议尽可能使用NetBeans IDE取代命令行.1.2.2节和1.2.3节依次介绍不使用

《Java语言导学(原书第6版)》一1.3 “Hello World!”实例程序剖析

1.3 "Hello World!"实例程序剖析 前面已经介绍了"Hello World!"程序及其编译和运行过程,本节介绍其工作原理.再次给出"Hello World!"程序的代码如下: "Hello World!"程序包含三个基本组件:源码注释.HelloWorldApp类定义和main方法.下述说明有助于初步理解这些代码,深入理解还需等到读完本书之后. 1.3.1 源码注释 下面的黑体字指出了"Hello Wo

json数据处理字符串,急!

问题描述 json数据处理字符串,急! 我想把返回的数据里的th去掉,为什么是未定义? 解决方案 是小写,substring() 解决方案二: 注意大小写..去掉th直接replace就了 PicturePath=PicturePath.replace(/th/g,'')//有多个th话用正则 解决方案三: 直接 'xxxxxx_th.jpg'.replace(/_th.jpg/,'_.jpg') 替换后 "xxxxxx_.jpg" 解决方案四: 把你写的代码贴出来啊.你空口说谁知道你

微信html5开发问题,JSON数据处理

问题描述 微信html5开发问题,JSON数据处理 在国内产地市.区最前面添加"全部"代表精确至市级或省级即可,如第二张图效果. 解决方案 http://www.cnblogs.com/yank/p/3418194.html