PHP将带有一些(重复)元素的XML转换为Json到Json数组[重复]

Posted

技术标签:

【中文标题】PHP将带有一些(重复)元素的XML转换为Json到Json数组[重复]【英文标题】:PHP Convert XML to Json with some (duplicate) elements to a Json Array [duplicate] 【发布时间】:2019-05-17 16:19:23 【问题描述】:

我的 Api (laravel) 使用 Json 代码。现在我也想支持xml。 Xml 消息必须转换为 Json 以适应现有结构。但我无法将 XML 匹配到所需的 Json 格式。

示例 XML 并转换为 Json:

        $xml = "<?xml version='1.0'?>
    <catalog>
       <book>
            <author>Jan</author>
            <title>Xml to Json Array</title>
            <pages>
                <page>
                    <nr>1</nr>
                    <title>Welcome to my book</title>
                    <pagereviews>
                        <pagereview>
                            <name>maikel</name>
                            <comment>very good</comment>
                        </pagereview>
                        <pagereview>
                            <name>John</name>
                            <comment>i like this page</comment>
                        </pagereview>                            
                    </pagereviews>
                </page>
                <page>
                    <nr>2</nr>
                    <title>more info</title>
                </page>  
                <page>
                    <nr>3</nr>
                    <title>lots of fun</title>
                </page>                              
            </pages>
       </book>
    </catalog>";

    $xmlObject = simplexml_load_string($xml);

    $jsonString = json_encode($xmlObject);

    return $jsonString;

在 Json 中,这会导致:


"book": 
    "author": "Jan",
    "title": "Xml to Json Array",
    "pages": 
        "page": [
            
                "nr": "1",
                "title": "Welcome to my book",
                "pagereviews": 
                    "pagereview": [
                        
                            "name": "maikel",
                            "comment": "very good"
                        ,
                        
                            "name": "John",
                            "comment": "i like this page"
                        
                    ]
                
            ,
            
                "nr": "2",
                "title": "more info"
            ,
            
                "nr": "3",
                "title": "lots of fun"
            
        ]
    

我需要它没有标签 Page 和 Pagereview。像这样。


   "book": 
      "author": "Jan",
      "title": "Xml to Json Array",
      "pages": [
         
            "nr": "1",
            "title": "Welcome to my book",
            "pagereviews": [
               
                  "name": "maikel",
                  "comment": "very good"
               ,
               
                  "name": "John",
                  "comment": "i like this page"
               
            ]
         ,
         
            "nr": "2",
            "title": "more info"
         ,
         
            "nr": "3",
            "title": "lots of fun"
         
      ]
   

【问题讨论】:

你能展示你的代码吗? $xmlObject = simplexml_load_string($xml); $jsonString = json_encode($xmlObject);返回 $jsonString; 这只是将一个转换为另一个 - 保持精确的结构。您需要更改结构,因此您需要编写代码来解析数据。从那里开始 - 然后返回您遇到的具体问题 您需要什么 - 您想更改原始 XML 还是已修复? 我认为,在转换为 json 时不能更改它。但是您可以获取数组并删除不需要的级别 【参考方案1】:

我制作了几个与 Laravel 集成的包来简化 XML。你可以在这里查看它们:

Collection Xml - 将集合转换为 XML Request Xml - 转换传入的 XML 并将其合并到 Request 对象中 Response Xml - 将数据转换为 XML 以获取响应 Xml To Array - 将 XML 转换为数组

如果您的 xml 需要在结构上与 json 不同,我建议您查看Spatie's Fractal package。它将为您的数据引入转换器。然后,您可以在使用我的包之前有条件地设置转换器,以使数据完全按照您的需要输出。

【讨论】:

我不确定,但看起来请求 XML 会满足 OP 要求不是吗? 一般来说,链接到工具或库should be accompanied by usage notes, a specific explanation of how the linked resource is applicable to the problem, or some sample code,或者如果可能的话,以上所有。

以上是关于PHP将带有一些(重复)元素的XML转换为Json到Json数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 将 XML 转换为 PHP 数组正在删除某些元素的属性

在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素

带有 php 或 python 属性的 xml 到 json

PHP - xml到json转换:“无法将字符串解析为XML”

有没有办法通过 PHP 自动将 XML 页面转换为 JSON? [复制]

将 Json 转换为 XML - 带有数组值的 Json