PHP快速入门08-JSON与XML处理

news2025/3/1 22:19:17

文章目录

  • 前言
  • 一、使用介绍
    • 1.1 JSON处理
    • 1.2 XML处理
  • 二、常见用法20例
    • 2.1 将数组转换为JSON格式:
    • 2.2 将JSON字符串转换回PHP数组:
    • 2.3 读取XML文件:
    • 2.4 将XML字符串转换成PHP对象:
    • 2.5 从URL获取JSON数据:
    • 2.6 写入JSON文件:
    • 2.7 使用cURL发送POST请求并接收JSON响应:
    • 2.8 使用SimpleXMLElement创建XML节点:
    • 2.9 使用XPath获取XML节点:
    • 2.10 将XML字符串转换为数组:
    • 2.11 修改XML节点的属性值:
    • 2.12 从URL获取XML数据:
    • 2.13 使用SimpleXMLElement删除XML节点:
    • 2.14 使用cURL发送GET请求并接收JSON响应:
    • 2.15 使用SimpleXMLElement修改XML节点的文本内容:
  • 总结


前言

本文已收录于PHP全栈系列专栏:PHP快速入门与实战
在这里插入图片描述

一、使用介绍

JSON与XML都是用于在不同的应用程序之间传输数据的格式化语言。在PHP中,可以使用内置函数处理JSON和XML格式的数据。

1.1 JSON处理

PHP提供了json_encode()和json_decode()两个函数来处理JSON格式的数据。其中,json_encode()函数将PHP数组转换为JSON格式字符串,而json_decode()函数将JSON格式字符串转换为PHP数组或对象。

例如,以下代码将一个PHP数组转换为JSON格式字符串:

$data = array(
    "name" => "John",
    "age" => 30,
    "city" => "New York"
);

$jsonData = json_encode($data);
echo $jsonData;

输出结果为:

{"name":"John","age":30,"city":"New York"}

而以下代码将一个JSON格式字符串转换为PHP数组:

$jsonData = '{"name":"John","age":30,"city":"New York"}';
$data = json_decode($jsonData);

echo $data->name; // 输出 John
echo $data->age; // 输出 30
echo $data->city; // 输出 New York

1.2 XML处理

PHP提供了SimpleXML扩展来处理XML格式的数据。SimpleXML允许将XML文档转换为一个对象,这使得操作XML文档变得简单。

例如,以下代码将一个XML文档解析为一个SimpleXMLElement对象:

$xml = simplexml_load_file("example.xml");
print_r($xml);

其中example.xml文件内容如下:

<person>
    <name>John</name>
    <age>30</age>
    <city>New York</city>
</person>

输出结果为:

SimpleXMLElement Object
(
    [name] => John
    [age] => 30
    [city] => New York
)

使用SimpleXML扩展,可以通过以下方式获取XML节点的值:

$name = $xml->name;
$age = $xml->age;
$city = $xml->city;

echo $name; // 输出 John
echo $age; // 输出 30
echo $city; // 输出 New York

二、常见用法20例

2.1 将数组转换为JSON格式:

$myArray = array('name' => 'XiaoMin', 'age' => 30, 'city' => 'New York');
$json = json_encode($myArray);
echo $json;

输出结果:

{"name":"XiaoMin","age":30,"city":"New York"}

2.2 将JSON字符串转换回PHP数组:

$json = '{"name":"XiaoMin","age":30,"city":"New York"}';
$myArray = json_decode($json, true);
echo $myArray['name'];

输出结果:

XiaoMin

2.3 读取XML文件:

$xml = simplexml_load_file('data.xml');
echo $xml->user[0]->name;

输出结果:

XiaoMin

2.4 将XML字符串转换成PHP对象:

$xmlString = '<root><name>XiaoMin</name><age>30</age><city>New York</city></root>';
$xml = simplexml_load_string($xmlString);
echo $xml->name;

输出结果:

XiaoMin

2.5 从URL获取JSON数据:

$url = 'https://api.example.com/data.json';
$jsonString = file_get_contents($url);
$data = json_decode($jsonString, true);
echo $data['name'];

输出结果:

XiaoMin

2.6 写入JSON文件:

$data = array('name' => 'XiaoMin', 'age' => 30, 'city' => 'New York');
$jsonString = json_encode($data);
file_put_contents('data.json', $jsonString);

2.7 使用cURL发送POST请求并接收JSON响应:

$url = 'https://api.example.com/data';
$data = array('name' => 'XiaoMin', 'age' => 30, 'city' => 'New York');
$jsonString = json_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonString);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$data = json_decode($response, true);
echo $data['status'];
curl_close($curl);

2.8 使用SimpleXMLElement创建XML节点:

$xml = new SimpleXMLElement('<root></root>');
$xml->addChild('name', 'XiaoMin');
$xml->addChild('age', 30);
$xml->addChild('city', 'New York');
echo $xml->asXML();

输出结果:

<root>
  <name>XiaoMin</name>
  <age>30</age>
  <city>New York</city>
</root>

2.9 使用XPath获取XML节点:

$xml = simplexml_load_file('data.xml');
$name = $xml->xpath('/users/user[1]/name');
echo $name[0];

输出结果:

XiaoMin

2.10 将XML字符串转换为数组:

$xmlString = '<root><name>XiaoMin</name><age>30</age><city>New York</city></root>';
$xml = simplexml_load_string($xmlString);
$jsonString = json_encode($xml);
$data = json_decode($jsonString, true);
echo $data['name'];

输出结果:

XiaoMin

2.11 修改XML节点的属性值:

$xmlString = '<root><user id="1"><name>XiaoMin</name><age>30</age><city>New York</city></user></root>';
$xml = simplexml_load_string($xmlString);
$xml->user['id'] = 2;
echo $xml->asXML();

输出结果:

<root>
  <user id="2">
    <name>XiaoMin</name>
    <age>30</age>
    <city>New York</city>
  </user>
</root>

2.12 从URL获取XML数据:

$url = 'https://api.example.com/data.xml';
$xmlString = file_get_contents($url);
$xml = simplexml_load_string($xmlString);
echo $xml->user[0]->name;

输出结果:

XiaoMin

2.13 使用SimpleXMLElement删除XML节点:

$xmlString = '<root><user id="1"><name>XiaoMin</name><age>30</age><city>New York</city></user></root>';
$xml = new SimpleXMLElement($xmlString);
unset($xml->user[0]);
echo $xml->asXML();

输出结果:

<root/>

2.14 使用cURL发送GET请求并接收JSON响应:

$url = 'https://api.example.com/data?name=XiaoMin&age=30';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$data = json_decode($response, true);
echo $data['city'];
curl_close($curl);

2.15 使用SimpleXMLElement修改XML节点的文本内容:

$xmlString = '<root><user id="1"><name>XiaoMin</name><age>30</age><city>New York</city></user></root>';
$xml = simplexml_load_string($xmlString);
$xml->user[0]->name = 'Jane';
echo $xml->asXML();

输出结果:

<root>
  <user id="1">
    <name>Jane</name>
    <age>30</age>
    <city>New York</city>
  </user>
</root>

总结

以上就是关于本篇文章介绍的内容,JSON与XML处理,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。

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

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

相关文章

SpringBoot集成Disruptor

Disruptor介绍 1.Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列&#xff0c;研发的初衷是解决内存队列的延迟问题&#xff08;在性能测试中发现竟然与I/O操作处于同样的数量级&#xff09;。基于 Disruptor 开发的系统单线程能支撑每秒 600 万订单&#xff0c;2010 年…

为什么APP也需要SSL证书?

通常我们会想到对网站使用SSL证书&#xff0c;来加密数据传输过程&#xff0c;确保信息不被篡改、泄露。对APP这类应用程序则选择软件签名证书&#xff0c;来进行数字签名和防止代码被恶意篡改。然而APP很容易获取到个人敏感信息&#xff0c;为了防止这些信息在传输过程中被有心…

JUC并发编程之读写锁

1 ReentrantReadWriteLock 当读操作远远高于写操作&#xff0c;这时候使用 读写锁 让 读-读 可以并发&#xff0c;提高性能&#xff0c;类似于数据库中的 select … from … lock in share mode 测试阻塞 提供一个 数据容器类 内部分别使用读锁保护数据的 read() 方法&#…

NAT-HCIA阶段综合实验

拓扑结构&#xff1a; 要求 1、ISP路由器只能配置IP地址&#xff0c;之后不得进行其他配置 2、内部整个网络基于192.168.1.0/24进行地址规划 3、R1、R2之间启动OSPF协议&#xff0c;单区域 4、PC1~PC4自动获取IP地址 5、PC1不能telnetR1&#xff0c;PC1外的其他内网PC可以t…

设计模式-行为型模式之状态模式

4. 状态模式 4.1. 模式动机 在很多情况下&#xff0c;一个对象的行为取决于一个或多个动态变化的属性&#xff0c;这样的属性叫做状态&#xff0c;这样的对象叫做有状态的(stateful)对象&#xff0c;这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事…

GPT大模型之后,谷歌、微软、百度们AI争霸的下一战

又来了一个大模型&#xff01; 4 月 14 日&#xff0c;雷军宣布推出小米的大规模语言模型&#xff1b;4 月 11 日&#xff0c;在阿里云峰会上&#xff0c;阿里云智能首席技术官周靖人正式宣布推出大规模语言模型——通义千问&#xff0c;并宣布要在钉钉、天猫精灵等阿里所有产品…

Ghidra使用之Options页面功能介绍

Apply Processor Defined Lables 在Ghidra中,apply processor defined labels功能可以为汇编代码中的地址和数据自动添加注释,这可以大大提高反汇编代码的可读性。 使用步骤如下: 打开您要反汇编的文件,进入Code Browser窗口。点击Edit菜单,选择Apply Processor Defined Labels…

Mysql不同服务器跨库查询解决方案

项目场景&#xff1a; Mysql在不同服务器实现跨库查询&#xff0c;类似dblink。 解决方案&#xff1a; 在两台不同服务器&#xff0c;实现跨库查询&#xff0c;其实现原理类似一个虚拟映射,需要用到mysql的另一个存储引擎Federated&#xff0c;FEDERATED存储引擎访问在远程数据…

另一个世界的人

休假 赶在假期无效前&#xff0c;休了个长假回了趟老家。不仅是为了逃离工作的繁忙&#xff0c;也为了看望老家的婆婆爷爷。回趟老家对于我们这种社会人来说确实太难了&#xff0c;如果只是周末回去也就休息一天就得往回赶&#xff0c;太累。自己的假期本来就不多&#xff0c;如…

如何对HDFS进行节点内(磁盘间)数据平衡

当HDFS的DataNode节点挂载多个磁盘时&#xff0c;往往会出现两种数据不均衡的情况&#xff1a; 1.不同DataNode节点间数据不均衡&#xff1b; 2.挂载数据盘的磁盘间数据不均衡。 特别是这种情况&#xff1a;当DataNode原来是挂载了几个数据盘&#xff0c;当磁盘占用率很高之…

7.1 参数的点估计

小结&#xff1a; 点估计是一种统计推断方法&#xff0c;它用于通过样本数据估计总体参数的值。在统计学中&#xff0c;总体是指一个包含所有个体的集合&#xff0c;而样本是从总体中选出的一部分个体。总体参数是总体的某种特征&#xff0c;如平均值、标准差、比例等。 点估…

全志V851s、V853内g2d模块sample深究

1. g2d 模块概述 g2d 主要功能&#xff1a; 1&#xff09;旋转&#xff1a;支持90、180、270旋转&#xff1b; 2&#xff09;镜像反转&#xff1a;H / V; 3) scale&#xff1a;放缩 4&#xff09;格式转换&#xff1a;yuv 转 rgb 等&#xff0c;多种格式相互间转换&#xff1b…

python学习——缺失值、重复值处理、排序及替换

文章目录 1 缺失值处理1.1 查看缺失值 df.isnull()1.2 统计缺失值 df.isnull().sum()1.3 删除缺失值 df.drop()1.4 填充缺失值 df.fillna()1.4.1 固定值填充 df.fillna(value)1.4.2 线性插值填充 df.fillna(df.interpolate()) 2 重复值处理2.1 查看重复值 df.duplicated()2.2 筛…

最佳实践:Android应用中的网络请求和数据缓存

最佳实践&#xff1a;Android应用中的网络请求和数据缓存 网络请求在Android应用中的重要性 在现代移动应用中&#xff0c;网络请求扮演着重要的角色&#xff0c;涉及到数据的获取、上传、更新等功能。网络请求在Android应用中具有关键地位&#xff0c;对于提供优秀的用户体验和…

如何使用山海鲸可视化绘制堆叠双轴图?

简介 堆叠双轴图是一种数据可视化图表类型&#xff0c;它结合了堆叠柱状图和双轴图的特点&#xff0c;将两个或更多个数据系列以不同的颜色或图案堆叠在一起&#xff0c;同时使用两个垂直轴来表示不同的数据范围&#xff0c;以显示它们之间的关系和趋势。其中一个轴通常代表数…

一个实例讲解如何使用BP神经网络(附代码)

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com BP神经网络是一个广泛应用的模型&#xff0c; 本文以一个实例作为主线&#xff0c;面向初学者讲解如何构建和使用一个BP神经网络 帮助没接触进BP神经网络的初学者&#xff0c;快速上手BP神经网络…

传统机器学习(四)聚类算法DBSCAN

传统机器学习(四)聚类算法DBSCAN 1.1 算法概述 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算法。 该算法将具有足够密度的区域划分为簇&#xff0c;并在…

【C++学习】类和对象--对象特性(2)

静态成员 静态成员就是在成员变量和成员函数前加上关键字static&#xff0c;称为静态成员。 静态成员变量&#xff1a; 所有对象共享同一份数据 在编译阶段分配内存 类内声明&#xff0c;类外初始化 静态成员函数&#xff1a; 所有对象共享同一个函数 静态成员函数只能访问静态…

MyBatis小技巧

一、MyBatis中接口代理机制及使用 我们不难发现&#xff0c;以前编写dao/mapper实现类中的方法代码很固定&#xff0c;基本上就是一行代码&#xff0c;通过SqlSession对象调用insert、delete、update、select等方法&#xff0c;这个类中的方法没有任何业务逻辑&#xff0c;既然…

【Cadence】 ADS Dynamic Link使用教程

ADS Dynamic Link使用教程 1.新建一个Cadence Schematic2.打开ADS3.在ADS新建Schematic4.加入控件OPTIONS5.加入Netlist6.仿真测试7.写在最后 1.新建一个Cadence Schematic 随便搭了一个Cascode 注意这个时候不要新建symbol 2.打开ADS 3.在ADS新建Schematic 选择对应的Cade…