You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP脚本中将JSON响应数据转换为XML

在PHP中将JSON转换为XML的方法

没问题!在PHP里把JSON转成XML其实挺简单的,我给你两种常用的方法,适配不同的场景:

方法一:基于SimpleXML的基础转换(适合结构简单的JSON)

这种方法适合你提供的这种层级不深的JSON结构,步骤清晰易懂:

  1. 先把JSON字符串解码成PHP关联数组
  2. 初始化SimpleXML对象创建根节点
  3. 遍历数组,逐个生成XML节点和子元素

示例代码

// 假设你的JSON数据已经存在$json变量中
$json = '{ "data":[ { "id":"15", "color_code":"#D9DD29", "font_color_code":"#ed1b1b", "type":"Big Chunes", "is_fade":"1", "is_Active":"1", "delay_time":"0" }, { "id":"58", "color_code":"#19A87D", "font_color_code":"#ffffff", "type":"Demo", "is_fade":"1", "is_Active":"1", "delay_time":"0" } ] }';

// 将JSON解码为关联数组(第二个参数true表示返回数组而非对象)
$decodedData = json_decode($json, true);

// 初始化SimpleXML,创建根节点<root>
$xml = new SimpleXMLElement('<root/>');

// 遍历data数组中的每个条目
foreach ($decodedData['data'] as $item) {
    // 为每个条目创建<item>子节点
    $xmlItem = $xml->addChild('item');
    // 遍历条目中的每个键值对,生成对应的XML子元素
    foreach ($item as $key => $value) {
        // 使用htmlspecialchars转义特殊字符,避免XML格式错误
        $xmlItem->addChild($key, htmlspecialchars($value));
    }
}

// 输出XML内容,或者用$xml->asXML('output.xml')保存到文件
echo $xml->asXML();

输出的XML示例

<?xml version="1.0"?>
<root>
  <item>
    <id>15</id>
    <color_code>#D9DD29</color_code>
    <font_color_code>#ed1b1b</font_color_code>
    <type>Big Chunes</type>
    <is_fade>1</is_fade>
    <is_Active>1</is_Active>
    <delay_time>0</delay_time>
  </item>
  <item>
    <id>58</id>
    <color_code>#19A87D</color_code>
    <font_color_code>#ffffff</font_color_code>
    <type>Demo</type>
    <is_fade>1</is_fade>
    <is_Active>1</is_Active>
    <delay_time>0</delay_time>
  </item>
</root>

方法二:递归转换(适合复杂嵌套的JSON)

如果你的JSON有多层嵌套的数组或对象,上面的循环就不够用了,这时候可以写一个递归函数来处理所有层级:

示例代码

// 递归处理JSON转XML的函数
function convertJsonToXml($data, &$xmlParentNode) {
    foreach ($data as $key => $value) {
        // 如果键是数字,改用<item>作为节点名(XML节点名不能以数字开头)
        $nodeName = is_numeric($key) ? 'item' : $key;
        
        if (is_array($value)) {
            // 如果是数组,创建子节点并递归处理
            $childNode = $xmlParentNode->addChild($nodeName);
            convertJsonToXml($value, $childNode);
        } else {
            // 如果是普通值,直接添加子元素
            $xmlParentNode->addChild($nodeName, htmlspecialchars($value));
        }
    }
}

// 初始化JSON数据和XML根节点
$json = '{ "data":[ { "id":"15", "color_code":"#D9DD29", "font_color_code":"#ed1b1b", "type":"Big Chunes", "is_fade":"1", "is_Active":"1", "delay_time":"0" }, { "id":"58", "color_code":"#19A87D", "font_color_code":"#ffffff", "type":"Demo", "is_fade":"1", "is_Active":"1", "delay_time":"0" } ] }';
$decodedData = json_decode($json, true);
$xml = new SimpleXMLElement('<root/>');

// 调用递归函数转换
convertJsonToXml($decodedData, $xml);

// 输出或保存XML
echo $xml->asXML();

注意事项

  • 一定要用htmlspecialchars()处理值,避免XML中出现&、<、>这类特殊字符导致解析错误
  • 如果需要自定义XML结构(比如把某些字段设为节点属性而非子元素),可以修改代码,比如用addAttribute()代替addChild()

内容的提问来源于stack exchange,提问作者Nikunj Gadhiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:40:37