我正在try 用php将xml转换为json.如果我使用简单的xml和json进行简单的转换,那么xml显示中的所有属性都不会被编码.

$xml = simplexml_load_file("states.xml");
echo json_encode($xml);

所以我试着像这样手动解析它.

foreach($xml->children() as $state)
{
    $states[]= array('state' => $state->name); 
}       
echo json_encode($states);

并且state的输出是{"state":{"0":"Alabama"}}而不是{"state":"Alabama"}

我做错了什么?

XML:

<?xml version="1.0" ?>
<states>
    <state id="AL">     
    <name>Alabama</name>
    </state>
    <state id="AK">
        <name>Alaska</name>
    </state>
</states>

输出:

[{"state":{"0":"Alabama"}},{"state":{"0":"Alaska"}

变量转储:

object(SimpleXMLElement)#1 (1) {
["state"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#3 (2) {
  ["@attributes"]=>
  array(1) {
    ["id"]=>
    string(2) "AL"
  }
  ["name"]=>
  string(7) "Alabama"
}
[1]=>
object(SimpleXMLElement)#2 (2) {
  ["@attributes"]=>
  array(1) {
    ["id"]=>
    string(2) "AK"
  }
  ["name"]=>
  string(6) "Alaska"
}
}
}

推荐答案

我想出来了.json_encode处理对象的方式不同于字符串.我将对象转换为字符串,它现在可以工作了.

foreach($xml->children() as $state)
{
    $states[]= array('state' => (string)$state->name); 
}       
echo json_encode($states);

Php相关问答推荐

Laravel变形 map 不适用于扩展模型

Yahoo Finance API文件_GET_CONTENTS 429请求太多

ForHumans函数中的月当量与单位限制

将部分产品排除在WooCommerce的计算附加费之外

我必须对所有的SQL查询使用预准备语句吗?

如何在PHP中组合日期范围

基于自定义域的每个购物车项目的WooCommerce定制数量输入步骤

在WooCommerce上设置简单和可变产品的最小订单量

PHP API - 本地主机中的 SSL 证书问题

在 WordPress 中将自定义帖子类型永久链接设置为 root

由于 PHP 版本不受支持,如何终止 PHP 脚本?

通过存储库检索 Blade 上的单值数据 出错

根据WooCommerce中选定的变体重量更改输入数量步值

如何在PHP中对多个脚本调用进行排队?

php如何删除括号内的百分比值

yii2 sql迁移覆盖新更改的记录

服务器遇到内部错误或配置错误,无法完成您的请求

Laravel 8:会话不适用

我怎样才能在 .htaccess 中有 2 个参数?

在 EasyAdmin 中添加全局操作,将我的按钮放在表格下方而不是上方