【问题标题】:How to convert XML to JSON in PHP如何在 PHP 中将 XML 转换为 JSON
【发布时间】:2021-11-25 12:05:00
【问题描述】:

我想将 som xml 数据转换为一些漂亮的 json 数据,然后将其输出到 api 中。输出不是问题,而是 xml 数据的格式。我环顾四周,但还没有让它像那里的一些在线转换器那样漂亮。这是xml数据结构:

<?xml version="1.0" encoding="utf-8"?>
<CatapultVariableSet>
  <Variable
    Name="Email"
    Comment=""
    EvaluatedDefinition="info@yourcompany.com">info@yourcompany.com</Variable>
  <Variable
    Name="StreetAddress"
    Comment=""
    EvaluatedDefinition="1234 Lorem Ipsum Ave.">1234 Lorem Ipsum Ave.</Variable>
  <Variable
    Name="MiR_250"
    Comment=""
    EvaluatedDefinition="MiR250">MiR250</Variable>
</CatapultVariableSet>

**Into this pretty JSON data:** 



    [
   {
      "Name": "Email",
      "Comment": "",
      "EvaluatedDefinition": "info@yourcompany.com",
      "#text": "info@yourcompany.com"
   },
   {
      "Name": "StreetAddress",
      "Comment": "",
      "EvaluatedDefinition": "1234 Lorem Ipsum Ave.",
      "#text": "1234 Lorem Ipsum Ave."
   },
   {
      "Name": "MiR_250",
      "Comment": "",
      "EvaluatedDefinition": "MiR250",
      "#text": "MiR250"
   }
]

这个转换器可以做到:https://www.freeformatter.com/xml-to-json-converter.html#ad-output

但它是怎么做到的呢?我一直在寻找答案,但我的版本并不那么漂亮。这是我迄今为止尝试过的,以接近:

function my_awesome_func() {
    $myfile = fopen("fildestination", "r") or die("Unable to open file!");
    $output = fread($myfile,filesize("fildestination"));
    fclose($myfile);
    
    $json = json_encode($output);
    $jsondecoded = json_decode($json, TRUE);
    $simplexml = simplexml_load_string($jsondecoded);
    $vars = $simplexml[0]->Variable;
    $simpledecode = json_encode($simplexml, JSON_PRETTY_PRINT);
   
    foreach($vars as $v){
        $array = array(
            "v_name" => $v["Name"][0],
            "v_value" => $v["EvaluatedDefinition"][0]
        );
        $encodej = json_encode($array, JSON_PRETTY_PRINT);
        echo $encodej;

    }
}

【问题讨论】:

  • 什么究竟不能使用给定的代码?您尝试过什么来解决问题?
  • 您可以考虑使用SimpleXML 来读取您的xml 数据,然后对其进行json_encode。
  • 它的工作范围扩大到它确实给了我一些 json 数据。但是,它的结构不是我想要的。这是上面代码的输出: { "v_name": { "0": "CompanyName" }, "v_value": { "0": "My Company, LLC" } }{ "v_name": { "0": "PhoneNumber" }, "v_value": null }{ "v_name": { "0": "MiR_250" }, "v_value": { "0": "MiR250" } }
  • “结构化”是什么意思?请通过编辑为您的问题添加所有说明

标签: php json xml


【解决方案1】:

您的 XML 是否始终采用这种结构?尝试编写一个通用 XML 到 JSON 的转换器比编写一个针对您的特定用例要困难得多。

如果总是相同,只需按名称从 JSON 结构中挑选出您需要的部分,然后将它们放入您想要的任何结构的数组中。对于你在问题中给出的 XML 输入和 JSON 输出,代码就这么简单:

$sx = simplexml_load_string($xml);
$output = [];
foreach ( $sx->Variable as $variable ) {
    $output[] = [
        'Name' => (string)$variable['Name'],
        'Comment' => (string)$variable['Comment'],
        'EvaluatedDefinition' => (string)$variable['EvaluatedDefinition'],
        '#text' => (string)$variable
    ];
}
echo json_encode($output, JSON_PRETTY_PRINT);

注意使用(string) 告诉SimpleXML 您想要元素或属性的文本内容,而不是代表它的对象。

【讨论】:

  • 这位先生,这就是我喜欢 stackoverflow 社区的原因!谢谢,这很完美,正是我想要的!
  • @znaa 希望我已经成功地解释了为什么这段代码有效,以便您将来可以将其应用于不同的情况。
猜你喜欢
  • 2012-02-08
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多