加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – json_encode为空XML标记创建空对象

发布时间:2020-12-13 16:47:55 所属栏目:PHP教程 来源:网络整理
导读:我有一个 XML文件,其中一些标签偶尔可能是空的.当我使用 PHP读取此文件并使用json_encode对其进行编码时,JSON会将所有空标记转换为空对象,而我更喜欢它们 – 空字符串.停止/避免此转换的最佳方法是什么? 编辑: 我不想从XML中删除这些标记,因为我没有特定标
我有一个 XML文件,其中一些标签偶尔可能是空的.当我使用 PHP读取此文件并使用json_encode对其进行编码时,JSON会将所有空标记转换为空对象,而我更喜欢它们 – 空字符串.停止/避免此转换的最佳方法是什么?

编辑:
我不想从XML中删除这些标记,因为我没有特定标记的XML条目和此标记为空的XML条目之间存在差异.

编辑2:
样本输入:

<Family>
  <name>aaa</name> 
  <adults>3</adults>
  <kids />
</Family>

孩子标签是空的

我想得到编码结果

Family[1].name = 'aaa';
Family[1].adults = 3;
Family[1].kids = '';

我得到的是:

Family[1].name = 'aaa';
Family[1].adults = 3;
Family[1].kids = Object(); //empty

EDIT3:

我的实现很简单:

用PHP

$xml = simplexml_load_file($filepath);
echo json_encode($xml,JSON_NUMERIC_CHECK);

在JavaScript中

objJson = $.parseJSON(xmlhttp.responseText);
        ....
        d["name"] = objJson.Family[i].name;
        d["adults"] = objJson.Family[i].adults;
        d["kids"] = objJson.Family[i].kids;

解决方法

你可以试试

$xml = '<Family>
    <name>aaa</name>
    <adults>3</adults>
    <kids />
    <sub>
        <tag>Nice </tag>
        <tag>Food </tag>
        <tag />
    </sub>
</Family>';

$xml = new SimpleXMLElement($xml);
$json = json_encode($xml,JSON_NUMERIC_CHECK);
$json = json_decode($json,true);

var_dump($json); // Before

filterEmptyArray($json); // <------ Filter Empty Array

var_dump($json); // After

之前

array
  'name' => string 'aaa' (length=3)
  'adults' => int 3
  'kids' => 
    array   <------------------- Empty Array
      empty
  'sub' => 
    array
      'tag' => 
        array
          0 => string 'Nice ' (length=5)
          1 => string 'Food ' (length=5)
          2 => 
            array 
              ...

array
  'name' => string 'aaa' (length=3)
  'adults' => int 3
  'kids' => string '' (length=0) <---------- String Conversion
  'sub' => 
    array
      'tag' => 
        array
          0 => string 'Nice ' (length=5)
          1 => string 'Food ' (length=5)
          2 => string '' (length=0) <---------- Supports Recursion (2nd level)

使用的功能

function filterEmptyArray(array &$a) {
    foreach ( $a as $k => &$v ) {
        if (empty($v))
            $a[$k] = "";
        else
            is_array($v) AND filterEmptyArray($v);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读