Issue with JSON


Issue with JSON

我试图让PHP读取XML文件,然后将其转换为JSON在我写的一些类中使用。我遇到的问题是它不会循环遍历所有XML节点。

由于某种原因,它将只返回一个节点而不是两个节点。我猜可能是JSON对象没有正确格式化。我已经用了大约2天了,啊!我是新手,所以对我好点;)

tracker.xml

<?xml version="1.0" encoding="UTF-8"?>
<tracker>
    <student>
        <id>0425655</id>
        <lname>Doe</lname>
        <fname>John</fname>
    </student>
    <student>
        <id>0123456</id>
        <lname>Smith</lname>
        <fname>Jane</fname>
    </student>
</tracker>

xml.php

class xml
{
    private $path;
    public function __construct($path)
    {
        $this->path = $path; 
    }
    public function xmlParse()
    {
        $xml = simplexml_load_file($this->path);
        return json_encode($xml->children());
    }
}

json.php

class json
{
    private $xmlArray;
    public function __construct($xmlArray)
    {
        $this->xmlArray = $xmlArray;
    }
    public function getJSON()
    {
        $json = json_decode($this->xmlArray);
        foreach($json->student as $v)
        {
            return 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
        } 
    }
}

我知道我可以将true作为第二个参数传递给json_decode(),但我想处理对象。

以下是json_decode()的输出(通过getJSON进行格式化后):

{
    "student": [
        {
            "id": "0425655",
            "lname": "Doe",
            "fname": "John"
        },
        {
            "id": "0123456",
            "lname": "Smith",
            "fname": "Jane"
        }
    ]
}

return立即,嗯,从当前函数返回。需要echo进行调试,如

所示
foreach($json->student as $v)
{
    echo 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
}

如果你想返回结果,要么只返回JSON对象,要么将其解析为数组或字符串。

那个JSON字符串对我来说是正确的,问题在于return语句-当您循环遍历数组时,请使用echo

关于JSON

我重新格式化了你的输出。如您所见,在"学生"下面有两个节点。可能您漏掉了[]字符。

下次格式化JSON,以便更好地了解发生了什么。:)


关于你的功能

您也可能因为调试输出坏了而错过了它:

foreach($json->student as $v)
{
   return 'ID: '.$v->id.'Last: '.$v->lname.'First: '.$v->fname;
} 

第一次迭代后返回。

试题:

$output = '';
foreach ($json->student as $v) {
   $output .= "ID: {$v->id} Last: {$v->lname} First: {$v->fname}'n";
} 
return $output;

老实说,虽然,我希望一个名为getJSON()的函数返回,嗯…JSON。而不是作者写的字符串。你的类和函数总体上命名得很糟糕。

也许你的函数应该是这样的:

public function getJSON()
{
    $json = json_decode($this->xmlArray);
    // some debug output for development
    foreach ($json->student as $v) {
        echo "ID: {$v->id} Last: {$v->lname} First: {$v->fname}'n";
    }
    return $json;
}