Mit symfony/serializer
Version 4. Die Daten, die ich JSON von einer API bin immer wieder, die wie diesesSymfony Serializer: denormalize (Deserialize) umständlich Arraydaten
{
"name": "Steves Book Shop",
"book_1": "Lord of the Rings",
"book_2": "The Hobbit",
"book_[n]": "there can be any number of books"
}
ich in folgende Modelle deserialisieren möchten sieht
class BookShop
{
protected $name;
/** @var Book[] */
protected $books;
public function getBooks(): array
{
return $this->books;
}
public function setBooks(array $books)
{
$this->books = $books;
}
public function addBook(Book $book)
{
$this->books[] = $book;
}
// ... other code removed to save space
}
class Book
{
protected $title;
// ... other code removed to save space
}
Bei der Verwendung von "cleaner" JSON unten funktioniert alles wie erwartet und ich bekomme BookShop
mit und Array von Book
s zurückgegeben.
{
"name": "Steves Book Shop",
"books": [
{ "title": "Lord of the Rings" },
{ "title": "The Hobbit" }
]
}
Was für eine saubere Art und Weise die ursprüngliche JSON denormalize die stattdessen das lästige book_1
hat wäre, book_2
usw.
Ich habe mit einem benutzerdefinierten Denormalisierer (DenormalizerInterface
) und meine Lösung sucht viel mehr experimentieren schwieriger als Sie erwarten würden.
'BookShop' und' Book' Klassen sind nicht unbedingt Doctrine Entitäten und möglicherweise nicht einmal in der Datenbank gespeichert werden. Sie sind auch vereinfachte Beispielklassen, um mein Problem zu demonstrieren, die realen Klassen und JSON, mit denen ich arbeite, sind komplexer. – Sam