PHP 如何读取 JSON

在日常做网站开发时,我们经常会遇到需要读取外部数据的场景,比如把天气API返回的天气信息、电商接口返回的商品列表存成JSON格式文件,再用PHP把这些数据“拿过来”用。很多新手刚接触PHP时,看到JSON字符串会犯懵,其实只要掌握两个核心函数,就能轻松搞定这个操作。

第一步:先搞懂JSON和PHP的“语言差异”

JSON就像一个统一的“数据翻译官”,它用固定的文本格式存数据,不管是后端PHP、前端JavaScript还是其他编程语言,都能读懂。但PHP有自己的数据类型,比如数组、对象,就像两种语言的“方言”,直接读JSON文本会像看外语一样看不懂。

PHP 如何读取 JSON

举个生活化的例子:你把写满商品信息的便签(JSON文本)交给PHP,PHP得先把便签翻译成自己能懂的“商品清单(PHP数组)”,才能用里面的内容。

第二步:用json_decode()把JSON转成PHP能用的格式

PHP提供的json_decode()就是那个“翻译官”,它能把JSON文本直接转成PHP的数组或对象,我们先看最常用的场景:读取本地JSON文件里的数据。

比如我们有个存了用户信息的users.json文件,内容是这样的:

`json

{"user1":{"name":"小明","age":18},"user2":{"name":"小红","age":20}}

`

要读取这个文件,分两步走:

  • 先用file_get_contents()把JSON文件的内容读成字符串;

再用`json_decode()`把字符串转成PHP数组。

代码示例:

`php

// 读取JSON文件的内容,转成字符串

$jsonStr = file_get_contents('users.json');

// 把JSON字符串转成PHP数组,第二个参数true很重要,不加会转成对象

$userArray = json_decode($jsonStr, true);

// 现在就能直接用数组里的数据了,比如输出小红的年龄

echo $userArray['user2']['age']; // 输出:20

`

这里要注意,json_decode()的第二个参数true,如果省略,转出来的是PHP对象,要用箭头符号(->)取值,比如$userArray->user2->age,用数组的方式更符合新手的使用习惯,所以建议加上true。

第三步:处理网络上的JSON数据(比如API接口)

如果JSON数据不是存在本地文件,而是来自网络接口,比如查天气的API,逻辑是一样的,只是把file_get_contents()换成访问接口的方式,用file_get_contents()直接传接口地址就能拿到JSON字符串。

比如调用一个返回城市天气的接口,代码:

`php

// 从天气API获取JSON数据

$weatherJson = file_get_contents('https://api.example.com/weather?city=北京');

// 转成PHP数组

$weatherData = json_decode($weatherJson, true);

// 输出北京今天的气温

echo $weatherData['today']['temp'];

`

这里可能会遇到接口请求失败的情况,比如网络不好,这时候file_get_contents()会报错,新手可以加个简单的判断:如果$weatherJson是false,就提示“获取天气数据失败”,避免页面出现白屏。

避坑:常见的读取错误

很多新手第一次用会出错,主要是两个原因:

  • JSON格式写错了:比如引号用了中文的“”,或者少了逗号,就像便签上的字写错了,翻译官读不懂,这时候json_decode()会返回null,可以加一句var_dump(json_last_error())查看错误类型,比如JSON_ERROR_SYNTAX就是格式错了;
  • 路径不对:如果是本地JSON文件,要确保PHP能找到这个文件,比如文件和PHP代码在同一个文件夹,直接写文件名就行,不在的话要写完整路径,比如'./data/users.json'。

其实PHP读取JSON核心就是两个函数,只要把JSON字符串转成PHP能懂的数组或对象,后续的操作就和处理普通数组没区别,多练几次就能熟练掌握了。

上一篇 C / C++语言核心特性与应用场景入门科普指南