代码之家  ›  专栏  ›  技术社区  ›  letsCode

从解析的XML PHP创建JSON响应

  •  1
  • letsCode  · 技术社区  · 7 年前

    我正在解析eBay API响应。我想把它送回一个更干净更容易用JavaScript解析的网站。我成功地解析了XML。。。但是现在把它转换成JSON重新发送回客户端让我有些头疼。

    注意 : $resp

    例如 ... $valueName 可以是 Grade . 然后我进入下一个foreach循环,得到这个的值。这些 values 可能是 10, 9.5, 9 .

    $arrayName = array();
    $arrayValue = array();
    
    foreach($resp->aspectHistogramContainer->aspect as $name) {
        $nameAspect = $name['name'];
        //$arrayName["aspectName"] = $nameAspect;
    
        foreach($name->valueHistogram as $value) {
            $valueAspect = $value['valueName'];
            //$arrayValue["aspectValue"] = $valueAspect;    
        }
    
        //array_push($arrayName, $arrayValue);
    }
    echo json_encode($arrayName);
    

    所以,不用我尝试创建自己的JSON,我就能得到我需要的。我回音结果和这个相似。。。

    名称

    -----价值

    名称

    -----价值

    名称

    等等等等

    [
      {
            "name": "NAME",
            "value": ["value", "value"]
        }, {
            "name": "name",
            "value": ["value", "value"]
        }
    ]
    

    任何帮助和指导都将不胜感激。

    <aspect> <valueHistogram> )

    <getHistogramsResponse xmlns="http://www.ebay.com/marketplace/search/v1/services">
    <ack>Success</ack>
    <version>1.13.0</version>
    <timestamp>2018-11-07T15:32:20.380Z</timestamp>
    <aspectHistogramContainer>
    <domainDisplayName>Baseball Cards</domainDisplayName>
    <aspect name="Card Manufacturer">
    <valueHistogram valueName="Ace Authentic">
    <count>19</count>
    </valueHistogram>
    <valueHistogram valueName="American Caramel">
    <count>2024</count>
    </valueHistogram>
    <valueHistogram valueName="APBA">
    <count>10554</count>
    </valueHistogram>
    <valueHistogram valueName="Bazooka">
    <count>8826</count>
    </valueHistogram>
    <valueHistogram valueName="Be A Player">
    <count>17</count>
    </valueHistogram>
    <valueHistogram valueName="Bell Brand Dodgers">
    <count>334</count>
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   Nigel Ren    7 年前

    $aspect 数据数组,然后向其中添加值。我用 (string) 为了确保数据不会存储为SimpleXMLElement,这可能会导致副作用。。。

    $arrayName = array();
    
    foreach($resp->aspectHistogramContainer->aspect as $name) {
        $aspect = [ "name" => (string)$name['name']];
    
        foreach($name->valueHistogram as $value) {
            $aspect["value"][] = (string)$value['valueName'];
        }
        $arrayName[] = $aspect;
    }
    echo json_encode($arrayName);
    

    [{"name":"Card Manufacturer","value":["Ace Authentic","American Caramel","APBA","Bazooka","Be A Player","Bell Brand Dodgers"]}]
    
        2
  •  2
  •   Samir Selia    7 年前

    创建一个数组 $resultArray

    $resultArray = array();
    
    $i = 0; // Maintain Array Index value
    foreach($resp->aspectHistogramContainer->aspect as $name) {
        $resultArray[$i]["aspectName"] = (string)$name['name'];;
    
        foreach($name->valueHistogram as $value) {
            $resultArray[$i]["aspectValue"][] = (string)$value['valueName'];
        }
        $i++; // Increment array index to store next value
    }
    echo json_encode($resultArray);
    
        3
  •  1
  •   JonJ    7 年前
    $results = array();
    
    // Parse the XML into a keyed array
    
    foreach($resp->aspectHistogramContainer->aspect as $name) {
        $nameAspect = (string) $name['name'];
        $values = array();
        foreach($name->valueHistogram as $value) {
            $values[] = (string) $value['valueName'];
        }
        $results[$nameAspect] = $values;
    }
    
    // This keeps things simple - rewrite to the required JSON format
    
    $outputForJSON = array();
    foreach ($results as $name => $values) {
        $outputForJSON[] = array(
             "name" => $name,
             "values" => $values
        );
    }
    
    echo json_encode($outputForJSON);