gpt4 book ai didi

php - json_encode() 删除属性 (PHP)

转载 作者:行者123 更新时间:2023-12-05 07:47:40 24 4
gpt4 key购买 nike

我正在使用 json_encode(simplexml_load_string($xml))在 PHP 7.0.10 中将一些 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> 的所有属性发生了什么?是吗?

谢谢,我感谢任何帮助!

编辑:我发现只要给定节点只有一个文本值,XML 元素的所有属性都会被删除:<something attribute="will be dropped">just text</something> .所以目前我正在使用一个丑陋的解决方法:我修改了代码,将所有出现的字符串替换为 <text>string</text>在将 XML 提供给 simplexml_load_string() 之前.该解决方案目前运行良好,但我仍然对更清洁的解决方案感兴趣……

最佳答案

您的 json 输出显示最后一条评论的最后一个 ID。所以json_encode()覆盖每次迭代的“评论”。你必须准备好你的 xml数据,之前可以给json_decode() .所以将 XML 解析为对象 simplexml然后从中创建一个 php 数组,这样你就可以 encode那个数组。我不认为你在这里得到了one-liner-solution ;)

针对您的问题:有人可以向我解释评论的所有属性发生了什么吗?

没有遗漏attributes , <comment> 1-5 中的 s 不会出现在 json 中。

更新:对不起,没看到这部分"Something","Hello","Just a comment", ,那真的是有线的。所有注释都在那里,但在同一个数组中是属性!?!?而属性本身就是一个对象!?你必须像我上面说的那样自己准备。没办法。您不能依赖 json_encode(simpelxml_load_string('XML')) 的结果,SimpleXML 不是为此而设计的!

关于php - json_encode() 删除属性 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473528/

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