PHP中的JSON与XML格式怎么转换

后端开发   发布日期:2024年11月05日   浏览次数:202

今天小编给大家分享一下PHP中的JSON与XML格式怎么转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、JSON转XML

PHP提供了可用于将JSON数据转换成XML格式的函数json_decode()。其语法如下:

  1. mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

其中,$json表示要转换的JSON字符串,$assoc表示是否将JSON对象转换成关联数组(默认为false),$depth表示最大递归深度(默认为512),$options表示转换选项(默认为0)。

下面是一个将JSON数组转换成XML的例子:

  1. <?php
  2. // JSON数据
  3. $json_data = '{
  4. "students": [
  5. {
  6. "name": "David",
  7. "age": 20,
  8. "score": {
  9. "English": 90,
  10. "Math": 85,
  11. "Chinese": 95
  12. }
  13. },
  14. {
  15. "name": "Tom",
  16. "age": 22,
  17. "score": {
  18. "English": 80,
  19. "Math": 75,
  20. "Chinese": 85
  21. }
  22. }
  23. ]
  24. }';
  25. // 将JSON数据转换成PHP数组
  26. $php_data = json_decode($json_data, true);
  27. // 将PHP数组转换成XML格式
  28. $xml_data = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><data></data>');
  29. array_to_xml($php_data, $xml_data);
  30. // 输出XML格式数据
  31. header('Content-type: text/xml');
  32. echo $xml_data->asXML();
  33. // 将数组转换成XML格式的函数
  34. function array_to_xml($arr, &$xml) {
  35. foreach ($arr as $key => $value) {
  36. if (is_array($value)) {
  37. if (!is_numeric($key)) {
  38. $subnode = $xml->addChild("$key");
  39. array_to_xml($value, $subnode);
  40. } else {
  41. array_to_xml($value, $xml);
  42. }
  43. } else {
  44. $xml->addChild("$key", htmlspecialchars("$value"));
  45. }
  46. }
  47. }
  48. ?>

上述代码首先将JSON字符串转换成PHP数组,然后再使用递归函数将PHP数组转换成XML格式。

输出XML格式数据如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <data>
  3. <students>
  4. <0>
  5. <name>David</name>
  6. <age>20</age>
  7. <score>
  8. <English>90</English>
  9. <Math>85</Math>
  10. <Chinese>95</Chinese>
  11. </score>
  12. </0>
  13. <1>
  14. <name>Tom</name>
  15. <age>22</age>
  16. <score>
  17. <English>80</English>
  18. <Math>75</Math>
  19. <Chinese>85</Chinese>
  20. </score>
  21. </1>
  22. </students>
  23. </data>

二、XML转JSON

要将XML格式转换成JSON格式,则需要先将XML转换成PHP数组,再使用json_encode()函数将PHP数组转换成JSON字符串。下面是一个将XML转换成JSON的例子:

  1. <?php
  2. // XML数据
  3. $xml_data = '<?xml version="1.0" encoding="UTF-8"?>
  4. <data>
  5. <students>
  6. <0>
  7. <name>David</name>
  8. <age>20</age>
  9. <score>
  10. <English>90</English>
  11. <Math>85</Math>
  12. <Chinese>95</Chinese>
  13. </score>
  14. </0>
  15. <1>
  16. <name>Tom</name>
  17. <age>22</age>
  18. <score>
  19. <English>80</English>
  20. <Math>75</Math>
  21. <Chinese>85</Chinese>
  22. </score>
  23. </1>
  24. </students>
  25. </data>';
  26. // 将XML数据转换成PHP数组
  27. $php_data = xml_to_array(simplexml_load_string($xml_data));
  28. // 将PHP数组转换成JSON字符串
  29. $json_data = json_encode($php_data);
  30. // 输出JSON格式数据
  31. header('Content-type: text/json');
  32. echo $json_data;
  33. // 将XML数据转换成PHP数组的函数
  34. function xml_to_array($xml) {
  35. $arr = array();
  36. foreach ($xml->children() as $element) {
  37. if (count($element->children()) == 0) {
  38. $arr[$element->getName()] = strval($element);
  39. } else {
  40. $arr[$element->getName()][] = xml_to_array($element);
  41. }
  42. }
  43. return $arr;
  44. }
  45. ?>

上述代码首先将XML字符串通过simplexml_load_string()函数转换成SimpleXMLElement对象,再通过递归函数将SimpleXMLElement对象转换成PHP数组。最后使用json_encode()函数将PHP数组转换成JSON字符串。

输出JSON格式数据如下:

  1. {
  2. "students": [
  3. {
  4. "name": "David",
  5. "age": "20",
  6. "score": {
  7. "English": "90",
  8. "Math": "85",
  9. "Chinese": "95"
  10. }
  11. },
  12. {
  13. "name": "Tom",
  14. "age": "22",
  15. "score": {
  16. "English": "80",
  17. "Math": "75",
  18. "Chinese": "85"
  19. }
  20. }
  21. ]
  22. }

以上就是PHP中的JSON与XML格式怎么转换的详细内容,更多关于PHP中的JSON与XML格式怎么转换的资料请关注九品源码其它相关文章!