gpt4 book ai didi

php - json_encode 为空 XML 标签创建空对象

转载 作者:可可西里 更新时间:2023-10-31 23:22:48 26 4
gpt4 key购买 nike

我有一个 XML 文件,其中某些标签偶尔可能是空的。当我使用 PHP 读取此文件并使用 json_encode 对其进行编码时,JSON 将我所有的空标签转换为空对象,而我更喜欢它们原样 - 空字符串。停止/避免此转换的最佳方法是什么?

编辑:我不想从 XML 中删除这些标签,因为对我来说,没有特定标签的 XML 条目和带有此标签为空的 XML 条目是有区别的。

编辑 2:示例输入:

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

kids标签为空

希望得到编码结果

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

我得到的是:

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

编辑3:

我的实现很简单:

在 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);
}
}

关于php - json_encode 为空 XML 标签创建空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com