我的这个类有三个变量,其中一个是数组。我编写了一个我将在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":[{},{}]}
知道为什么书籍仍然空着?提前谢谢!
答案 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#也有类似的接口。