json_encode() removes attributes (PHP)(Json_encode()删除属性(PHP))
问题描述
我正在使用PHP 7.0.10中的json_encode(simplexml_load_string($xml))
将一些XML代码转换为JSON。以下XML
<?xml version="1.0" encoding="UTF-8"?>
<comments count="6">
<comment id="1" active="1" object="1" user="1" created="1473776866" updated="1473776866">Something</comment>
<comment id="2" active="1" object="1" user="2" created="1473776866" updated="1473776866">Hello</comment>
<comment id="3" active="1" object="1" user="3" created="1473776866" updated="1473776866">Just a comment</comment>
<comment id="6" active="0"/>
</comments>
创建以下结果:
{"comments":{"@attributes":{"count":"6"},"comment":
["Something","Hello","Just a comment", {"@attributes":{"id":"6","active":"0"}}]}}
有人能解释一下<comment>
%s的所有属性是怎么回事吗?
谢谢,感谢您的帮助!
编辑:我发现只要给定节点只有一个文本值<something attribute="will be dropped">just text</something>
,就会删除XML元素的所有属性。
因此,目前我使用了一个难看的解决办法:我修改了代码,使其在将XML提供给simplexml_load_string()
之前,将所有出现的字符串替换为<text>string</text>
。这个解决方案目前运行良好,但我仍然对更干净的…感兴趣
推荐答案
SimpleXML不是为这种盲转换而构建的。它不会创建一个可以转换为JSON的整齐的数组,而且实际上创建一个JSON格式来整齐地封装所有可能的XML结构是很棘手的(我觉得这几乎没有意义)。
像这样运行json_encode
时调用的方法主要用于调试(请注意,@attributes
不是您在与对象本身交互时使用的东西)。
这里的具体问题是,它试图通过选择如何最好地表示每个元素的内容来提供帮助,例如a)只是一个字符串,b)一个子元素的数组,c)具有‘@Attributes’属性的对象包含属性键-值对等。它没有同时包含字符串内容和属性的格式,因此您在输出中不会同时包含这两个内容。
解决方案as JustOnUnderMillions rightly says是将您实际需要的数据解析成您选择的结构,然后您可以json_encode
。大概是这样的:
$comments = [];
$sx = simplexml_parse_string($xml);
foreach ( $sx->comment as $sx_comment ) {
$comments[] = [
// Extract text attributes as appropriate types
'id' => (int)$sx_comment['id'],
'user_id' => (int)$sx_comment['user'],
// Make this one a boolean
'active' => ( (int)$sx_comment['active'] == 1 ),
// Maybe you want to format these as ISO 8601...
'created_ts' => (int)$sx_comment['created'],
'updated_ts' => (int)$sx_comment['updated'],
// Extract text content as a string
'text' => (string)$sx_comment
];
}
echo json_encode($comments);
这篇关于Json_encode()删除属性(PHP)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Json_encode()删除属性(PHP)
基础教程推荐
- 超薄框架REST服务两次获得输出 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01