JSON问题

时间:2011-07-23 17:42:30

标签: php 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"
        }
    ]
}

3 个答案:

答案 0 :(得分:1)

立即

return从当前函数返回。您希望echo进行调试,如

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

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

答案 1 :(得分:0)

JSON字符串看起来正确,问题在于return语句 - 当您循环遍历数组时,请使用echo

答案 2 :(得分:0)

关于你的JSON

我重新格式化了你的输出。如您所见,“student”下的两个节点。也许您错过了[]字符。

下次格式化您的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;
}