我有一个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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。