如何使用数组变量获取对象的JSON表示

时间:2018-04-21 18:36:59

标签: php arrays json

我的这个类有三个变量,其中一个是数组。我编写了一个我将在json_encode()中使用的方法。

public function getJSONString(){
     return [
         'id' => $this->id,
         'name' => $this->name,
         'books' => $this->books
     ];
}

书籍是Book对象的数组。每个Book对象也具有相同的确切方法,但随后具有自己的变量。

public function getJSONString(){
    return [
        'id' => $this->id,
        'title' => $this->title
    ];
}

当我调用print(json_encode($ author-> getJSONString()))时我接受了这个:

{"id":"1","name":"name1","books":[{},{}]}

知道为什么书籍仍然空着?提前谢谢!

2 个答案:

答案 0 :(得分:2)

您还需要使用Book s'getJSONString()方法。这将使books属性等于JSON-encode-capable对象的数组。

在作者的getJSONString()方法中:

public function getJSONString(){
     return [
         'id' => $this->id,
         'name' => $this->name,
         'books' => array_map(function($book) { return $book->getJSONString(); }, $this->books)
     ];
}

我不熟悉PHP,但你可以从中得到这个想法。它映射一个函数以获得getJSONString()数组上的books

答案 1 :(得分:0)

你绝对应该使用JsonSerializable interface

json_encode

当你为这个类的对象或任何包含该对象的对象调用jsonSerialize时,php将调用你的{{1}}方法。与您尝试执行的操作类似,但这是特定于语言的正确方法。其他语言如C#也有类似的接口。