您的位置:

了解PHP JSON编码和解码

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它易于人阅读和编写,同时也易于机器理解和生成。PHP提供了json_encode()函数和json_decode()函数来实现JSON的编码和解码。接下来,将从以下几个方面为您讲解PHP JSON编码和解码。

一、JSON的概述

JSON是一种轻量级数据交换格式,它以文本的方式进行数据编码,可被解析成Javascript对象。JSON采用了类似于C语言的语法,这使得JSON数据在各种编程语言中都是易于理解的。

JSON数据由两种结构构成:键值对和数组。键值对表示为{key:value},数组表示为[value1,value2,value3]。

二、json_encode()函数

json_encode()函数用于将PHP中的数据转换为JSON格式的字符串。

下面是一个例子:

$data = array(
    "name" => "Tom",
    "age" => 18,
    "sex" => "male"
);
$jsonStr = json_encode($data);
echo $jsonStr;

上述代码将$data数组转换为JSON格式的字符串,并输出。输出结果为:

{"name":"Tom","age":18,"sex":"male"}

三、json_decode()函数

json_decode()函数用于将JSON格式的字符串转换为PHP中的变量。

下面是一个例子:

$jsonStr = '{"name":"Tom","age":18,"sex":"male"}';
$data = json_decode($jsonStr, true);
print_r($data);

上述代码将JSON格式的字符串$jsonStr转换为PHP中的变量,并用print_r()函数输出。输出结果为:

Array
(
    [name] => Tom
    [age] => 18
    [sex] => male
)

四、处理JSON数据中的中文字符

由于JSON数据是以Unicode字符集输出的,所以中文字符必须进行编码后才能正确传输。而json_encode()函数中存在第二个参数$options,可以通过设置JSON_UNESCAPED_UNICODE常量来解决处理JSON数据中的中文字符。

下面是一个例子:

header('Content-Type:application/json;charset=utf-8');
$data = array(
    "name" => "张三",
    "age" => 20,
    "sex" => "男"
);
$jsonStr = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $jsonStr;

上述代码将$data数组转换为JSON格式的字符串,并用echo输出。其中用header()函数设置响应头Content-type,防止中文乱码。输出结果为:

{"name":"张三","age":20,"sex":"男"}

五、处理含有对象或数组的JSON数据

在JSON数据中,可以包含对象或数组等复杂的数据结构,其编码和解码也比较简单。在json_encode()函数中,只需将包含对象和数组的变量转换为PHP中的对象或数组即可;在json_decode()函数中,只需通过第二个参数指定返回值类型即可。

下面是一个例子:

$data = array(
    "name" => "Tom",
    "age" => 18,
    "hobbies" => array("reading","music"),
    "address" => (object)array("province"=>"Guangdong","city"=>"Shenzhen","district"=>"Nanshan")
);
$jsonStr = json_encode($data);
echo $jsonStr;
echo "\n";
$obj = json_decode($jsonStr);
print_r($obj);
echo "\n";
$assocArr = json_decode($jsonStr, true);
print_r($assocArr);

上述代码中,$data数组中包含一个hobbies数组和一个address对象。用json_encode()函数将其转换为JSON格式的字符串,用echo输出。用json_decode()函数将其转换为对象和数组,并用print_r()函数输出。输出结果为:

{"name":"Tom","age":18,"hobbies":["reading","music"],"address":{"province":"Guangdong","city":"Shenzhen","district":"Nanshan"}}
stdClass Object
(
    [name] => Tom
    [age] => 18
    [hobbies] => Array
        (
            [0] => reading
            [1] => music
        )
    [address] => stdClass Object
        (
            [province] => Guangdong
            [city] => Shenzhen
            [district] => Nanshan
        )
)
Array
(
    [name] => Tom
    [age] => 18
    [hobbies] => Array
        (
            [0] => reading
            [1] => music
        )
    [address] => Array
        (
            [province] => Guangdong
            [city] => Shenzhen
            [district] => Nanshan
        )
)

六、JSONPath的使用

JSONPath是一种用于在JSON数据中选取数据的表达式,类似于XPath用于XML。使用JSONPath后,我们可以通过一个表达式来调整数据并从中提取出所需的值。

使用JSONPath需要导入第三方类库。下面是一个例子:

假设有以下JSON字符串:

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}

要从中提取出“Sword of Honour”的书名和价格,JSONPath表达式为$store.book[1].title和$store.book[1].price。代码如下:

use Flow\JSONPath\JSONPath;

$jsonStr = '{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}';
$json = json_decode($jsonStr);
$jsonPath = new JSONPath($json);
$title = $jsonPath->find('$store.book[1].title')[0];
$price = $jsonPath->find('$store.book[1].price')[0];
echo "书名:".$title."\n";
echo "价格:".$price."\n";

输出结果为:

书名:Sword of Honour
价格:12.99

结语

通过本文的讲解,您已经了解了PHP JSON编码和解码的相关知识。同时,您也学会了如何处理JSON数据中的中文字符和含有对象或数组的JSON数据,以及如何使用JSONPath从JSON数据中提取所需的数据。

了解PHP JSON编码和解码

2023-05-11
php解析json编码,php json解码

本文目录一览: 1、如何在PHP中解析json 2、php获得api返回的json数据后,如何解析? 3、php解析json数据 4、php解析不了JSON? 如何在PHP中解析json PHP里面有

2023-12-08
php中json编码与解码,php json中文乱码

本文目录一览: 1、如何解决php中json 2、php解析json数据 3、如何使用PHP语言来编码和解码JSON对象 4、PHP 如何读取如下的JSON数据? 如何解决php中json json_

2023-12-08
php的json解码生成码(json数据解码)

2022-11-10
php解码json打印(php 读取json)

本文目录一览: 1、php怎么打印出从服务器返回的原始json? 2、php 输出json及显示json中的中文汉字详解及实例 3、用php解析json里面的内容,然后打印出来 php怎么打印出从服务

2023-12-08
phpjsondecode编码(php json decod

本文目录一览: 1、php json decode 中文乱码 2、如何在PHP中解析json 3、php怎样接收整个json数组 4、在php中json_decode 5、php怎么json数据转化为

2023-12-08
php第三节笔记,php读书笔记

2022-12-02
如何从json解码的php,json乱码在线解密

2022-11-20
json转xmlphp代码,jsonp php

本文目录一览: 1、php解析xml,转换成JSON,附格式 2、php json 转 xml,从数据库调取的内容怎么转换为xml格式输出,之前弄得是json,不会转,新手。 3、PHP生成及获取JS

2023-12-08
php新手笔记,php初学者

2022-11-19
信息记录的php代码如何编写,php笔记源码

2022-11-30
php基础学习笔记下,细说php读书笔记

2022-11-18
无法解码php中的json值,php解析json字符串

本文目录一览: 1、php jsonp传过去的中文怎么不能解码 2、请求外部接口返回json数据,php json_encode解码出现问题,有些数据无法显示。 3、php接口返回json,无法解析

2023-12-08
php学习入门笔记,php 入门

2023-01-07
php解析json数据的源代码(php生成json数据)

2022-11-16
php教程笔记复习1(细说php读书笔记)

2022-11-10
phpjson解析不(PHP解析json)

本文目录一览: 1、php代码中不能解析json吗 2、php 解析不了json 3、PHP返回的JSON里含有未知字符使数据无法解析 4、php解析不了JSON? php代码中不能解析json吗 额

2023-12-08
php转换json编码,php数组转json

本文目录一览: 1、PHP如何正常转换中文json格式字符串 2、php怎么将数组数组转化为json格式的数据 3、php转换成json数据格式 PHP如何正常转换中文json格式字符串 在 php

2023-12-08
学习php随笔,PHP笔记

2022-11-25
php获取json乱码(php出现乱码)

本文目录一览: 1、PHP中json_encode中文乱码问题 2、关于php后台获取前台post过来的json数据中文乱码的问题~ 3、我用php输出json 中文显示乱码,请大侠帮忙解决一下 4、

2023-12-08