jsonSerialize

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

PHP developer - Digital Agency

Functie Het team telt momenteel 20 collega’s, bestaande uit developers (front- en backend) en het operations team, waaronder ook het management en twee scrum masters vallen. Ze zijn op zoek naar een PHP developer die in staat is zelfstandig te werken. Je komt te werken in één van de drie scrumteams en gaat aan de slag met een project voor de klant. Het fijne hieraan is dat je wel afwisseling hebt qua werk, maar tegelijkertijd doorlopend werkt voor bestaande klanten. Hierdoor krijg je ook de kans om echt de diepte in te gaan en innovatieve technische oplossingen neer te zetten.

Bekijk vacature »

SQL database ontwikkelaar

Functie omschrijving Ben jij niet bang voor complexe algoritmes? Schikt het schrijven van procedures in T-SQL jouw niet af en heb jij al de nodige informatie in SQL, dan is functie precies wat voor jou! Jouw werkzaamheden gaan er als volgt uit zien: Je gaat werken aan de complexere projecten waar jij van A tot Z bij betrokken bent. Je gaat zorg dragen voor het ontwerp, de ontwikkeling en het updaten van SQL databases. Dit doe je op basis van T-SQL. Jij bent van start tot finish betrokken bij de projecten die jij leidt. Je houdt contact met klanten en

Bekijk vacature »

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

Bekijk vacature »

Traineeship Fullstack developer (WO, 0 tot 3 jaar

Functie Zoals beschreven ga je vanaf start aan de slag bij een passende opdrachtgever, hierbij kijken ze echt naar jouw wensen, kennis/ervaring maar ook de reisafstand. Momenteel hebben ze meerdere klanten waarbij ze groepen hebben opgezet wat maakt dat er diverse uitdagende kansen liggen. Naast het werken bij de opdrachtgever, en het volgen van de masterclasses, zul je regelmatig met de andere trainees in contact zijn. Niet alleen op professioneel vlak maar juist ook bij de borrels en kwartaaluitjes! Kortom; een jaar lang hard aan jezelf werken in combinatie met gezelligheid en plezier. Spreek dit jou aan? Dan komen we

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

Bekijk vacature »

Software developer - C Sharp

Functie omschrijving Voor een opdrachtgever, met een prachtig kantoor in omgeving Wateringen zijn wij op zoek naar een software ontwikkelaar die graag werkt met C#, JAVA of Oracle. Heb jij interesse in het programmeren en ontwikkelen van software? En heb jij enige ervaring met Oracle databases en PL/SQL? Als software developer werk je met je collega's samen in een leuk en informeel team aan het (her)ontwerpen van bedrijfssystemen. Je houdt je bezig met het ontwikkelen van REST API's en je onderhoudt applicaties in Oracle PL/SQL en APEX. Vind jij het leuk om in een Agile/Scrum omgeving te werken? Wil jij

Bekijk vacature »

Low Code Ontwikkelaar

In het kort Als Low Code Developer werk je aan projecten bij en voor onze klanten, waarbij je voor het ontwikkelen van de oplossingen een technisch low-code platform gebruikt. Samen met het team streef je naar de beste oplossing en bepalen jullie de juiste aanpak. Je rol is divers en je bent van begin tot eind betrokken bij de ontwikkeling zowel de back-end en de front-end van de applicatie. Naast de ontwikkeling en oplevering, breng je ook advies uit aan de klant waarom bepaalde keuzes worden gemaakt. Je bent dan ook communicatief sterk en kunt je keuzes goed (inhoudelijk) onderbouwen.

Bekijk vacature »

Back-end .NET Developer

Functie omschrijving C# / .NET Developer gezocht voor een dynamische organisatie in de regio Houten! Voor een leuke organisatie in de regio Houten zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. In deze functie werk jij aan verschillende projecten en ga je vaak bij klanten op bezoek. Binnen deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid treffen. Bedrijfsprofiel Waar ga je werken? Het bedrijf waar je gaat werken is gespecialiseerd in het ontwerpen en implementeren van procesautomatisering en procesinformatisering. Zij doen dit onder andere voor de (petro)chemie, pharma, infra,

Bekijk vacature »

Junior .NET developer

Functie Jij hebt natuurlijk net jouw Bachelor op zak en gaat nu voor het eerst aan de slag bij een werkgever als junior .NET ontwikkelaar. Waarschijnlijk lijkt het jou spannend om ineens aan de slag te gaan bij klanten in de consultancy. Maak je niet druk, jij komt hier terecht in een warm bad en wordt totaal niet in het diepe gegooid. Zodra jij hier begint wordt jij gekoppeld aan een persoonlijke manager met een persoonlijk ontwikkelplan. Jij krijgt een scala aan trainingen, denk aan trainingen ten behoeve van het opdoen van zelf kennis en gedragscompetenties, maar ook trainingen voor

Bekijk vacature »

.NET Developer

Dit ga je doen Programmeren in .NET, Javascript & C# en ontwikkelen in Web Services, Windows Services en MS SQL Server; Zelfstandig verbanden maken Analyseren, testen, bugs fixen, reviewen en rapporteren; Juiste prioriteiten stellen en verantwoordelijkheid nemen; Op architectuur niveau meedenken; Af en toe klanten bezoeken. Hier ga je werken Voor onze relatie zijn wij opzoek naar een .NET ontwikkelaar met minimaal 3 jaar werkervaring. Je komt te werken in een groeiend bedrijf met betrokken collega's die zorgen voor een familiaire sfeer op de werkvloer. Als .NET ontwikkelaar word jij vanaf de eerste werkdag betrokken bij het gehele ontwikkelproces. De

Bekijk vacature »

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Senior Full Stack developer

Bedrijfsomschrijving tbd Functieomschrijving Full Stack Java Development bij Randstad Groep Nederland (HQ) Er is een vacature in het Corporate Client Solutions (CCS) team. Dit team is met een ander team net begonnen aan het project ‘Grip op Inhuur’. Het doel van dit project is de tevredenheid van onze leveranciers te verhogen en de efficiëntie van onze administratie te verbeteren. Onderdeel daarvan is een ‘Mijn-omgeving’ voor ZZP’ers en leveranciers. Naast dit nieuwe project werkt het team ook aan het onderhoud en verbeteren van een digitaal vacature management systeem waarmee dagelijks vele vacatures worden voorzien. Het team ontwikkelt zo veel mogelijk zelf

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »
Jorn Reed

Jorn Reed

27/05/2022 10:58:07
Quote Anchor link
Hoi,

Ik gebruik voor het eerst jsonSerialize in een model class. Omdat ik een customer object moet creeeren. Die ik meestuur met een api. In de class gebruik ik uiteraard de functie jsonSerlize. Die automatisch wordt aangeroepen bij `new Customer($data)`. Toch vraag ik me af, waarom ik met het implementeren van dit, nog steeds `json_encode(new Customer($data))` moet doen.

Ik verwacht namelijk, dat het object wat in php gemaakt word al een json object is, anders snap ik die hele class implementatie verkeerd.
 
PHP hulp

PHP hulp

20/04/2024 05:19:40
 
Ward van der Put
Moderator

Ward van der Put

27/05/2022 13:12:45
Quote Anchor link
jsonSerialize() bepaalt wat er wordt geserialiseerd en json_encode() bepaalt hoe dat wordt geserialiseerd. jsonSerialize() selecteert alleen de data in een array en json_encode() regelt de datastructuur en datacodering van een string.
 
Jorn Reed

Jorn Reed

27/05/2022 14:03:05
Quote Anchor link
Ward van der Put op 27/05/2022 13:12:45:
jsonSerialize() bepaalt wat er wordt geserialiseerd en json_encode() bepaalt hoe dat wordt geserialiseerd. jsonSerialize() selecteert alleen de data in een array en json_encode() regelt de datastructuur en datacodering van een string.

Ah oke. Ik snap alleen het woordje geserialiseerd niet zo goed. Ligt aan mij hoor. Overigens vind ik dit er met json_encode lelijk uitzien. Aangezien die api alleen maar JSON kan ontvangen, heb ik json_encode in mijn api class om het te ontvangen array object gezet, zodat altijd als je een array mee stuurt, dat dat json word.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$postCustomer = (new ApiClient($location_id))->postCustomer(json_encode(new Customer($data)));
 
Ward van der Put
Moderator

Ward van der Put

28/05/2022 10:10:29
Quote Anchor link
Met serialiseren bedoelen we het omzetten van een dataobject in een vorm die geschikt is voor sequentiële verwerking. Bij JSON is dat een serie karakters in UTF-8 en dat is gewoon een ‘tekenreeks’ of string in PHP.

json_encode() voor JSON is vergelijkbaar met serialize() voor PHP: beide creëren een stringrepresentatie van een object. jsonSerialize() geeft je daarbij een voorbereidende fase voor het selecteren van de elementen van het dataobject die je wilt meenemen in de serialisatie. jsonSerialize() voor json_encode() is vergelijkbaar met de magische methode __serialize() voor serialize().

Je gebruikt jsonSerialize() in de praktijk vooral om een interne datastructuur in PHP te mappen naar een API in JSON-LD, bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

declare(strict_types=1);

class Person implements \JsonSerializable
{
    public ?string $firstName = null;
    public ?string $lastName = null;
    
    public function jsonSerialize(): array
    {
        $result = [
            '@context' => 'https://schema.org',
            '@type' => 'Person',
        ];

        
        if ($this->firstName !== null && $this->lastName !== null) {
            $result['name'] = $this->firstName . ' ' . $this->lastName;
        }


        return $result;
    }
}



$person = new Person();
$person->firstName = 'Jane';
$person->lastName = 'Doe';

$json = json_encode($person, \JSON_UNESCAPED_SLASHES);
var_dump($json);
?>

Dat geeft je in JSON-LD:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
{"@context":"https://schema.org","@type":"Person","name":"Jane Doe"}
 
Jorn Reed

Jorn Reed

30/05/2022 11:52:24
Quote Anchor link
Ah oke!
Ik gebruik het inderdaad voor een api. Ik was bezig met een WP plugin, en in de core file handel ik meestal de ajax calls af, met PHP. Maar op het moment dat ik daar een customer object/array aanmaakte, werd de code zo rommelig en veel. Daarom besloot ik om meer met classes te werken, 1 die de customer valideert, en 1 die het object aanmaakt, en een object terug geeft, hierdoor kwam ik terecht bij JsonSerliaze.
 
Ward van der Put
Moderator

Ward van der Put

30/05/2022 16:00:40
Quote Anchor link
Als je een apart data object gebruikt, komt de functie get_object_vars() van pas. Deze functie gebruik ik hier in toArray() voor het ophalen van een array met alle objecteigenschappen die niet null zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

declare(strict_types=1);

class Person implements \JsonSerializable
{
    public ?string $firstName = null;
    public ?string $lastName = null;
    
    public function jsonSerialize(): array
    {
        $result = [
            '@context' => 'https://schema.org',
            '@type' => 'Person',
        ];


        return $result + $this->toArray();
    }


    public function toArray(): array
    {
        $result = get_object_vars($this);
        $result = array_filter($result);
        return $result;
    }
}



$person = new Person();
$person->firstName = 'Jane';
$person->lastName = 'Doe';

$json = json_encode($person, \JSON_UNESCAPED_SLASHES);
var_dump($json);
?>


De array uit toArray() kun je daarnaast gebruiken als key/value pairs voor een rij in een databasetabel.
 
Jorn Reed

Jorn Reed

31/05/2022 08:56:04
Quote Anchor link
Ah oke, dus dat maakt het bijvoorbeeld handig om in een keer een object in een database op te slaan, in plaats van dat je alle velden los definieert in een query? Simpel gezegd gewoon makkelijker een object in een keer op te slaan.

Toevoeging op 31/05/2022 09:46:30:

Ik heb nog een ander vraagje wat betreft het jsonSerializen.
Ik heb hier dus die Customer class:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

class Customer implements JsonSerializable {

    public $firstName;
    public $middleName;
    public $lastName;
    public $email;
    public $country = 'Nederland';
    public $phoneMobile;
    public $gender;
    public $zipcode;
    public $city;
    public $address;
    public $houseNumber;
    public $houseNumberExtension;
    public $birthDate;
    public $iban;
    public $language = 'nl_NL';
    public $setAVG;

    public function __construct($data){
        $this->firstName = $data['fname'];
        $this->middleName = $data['prefix'];
        $this->lastName = $data['lname'];
        $this->email = $data['email'];
        $this->phoneMobile = $data['phone'];
        $this->gender = $data['gender'];
        $this->zipcode = $data['zipcode'];
        $this->city = $data['city'];
        $this->address = $data['address'];
        $this->houseNumber = $data['housenumber'];
        $this->houseNumberExtension = $data['extension'];
        $this->birthDate = $data['birthdate'];
        $this->iban = $data['iban'];
        $this->setAVG = $data['avg'];
    }


    public function jsonSerialize() {
        return [
            "FirstName"=> $this->firstName,
            "MiddleName"=> $this->middleName,
            "LastName"=> $this->lastName,
            "Email"=> $this->email,
            "Country"=> $this->country,
            "PhoneMobile"=> $this->phoneMobile,
            "Gender"=> $this->gender,
            "Zipcode" => $this->zipcode,
            "City"=> $this->city,
            "Address" => $this->address,
            "HouseNumber" => $this->houseNumber,
            "HouseNumberExtension" => $this->houseNumberExtension,
            "BirthDate"=> $this->birthDate,
            "IBAN"=> $this->iban,
            "Language"=> $this->language,
            "SetAVG"=> false,
        ];
    }
}


?>


Voordat dit object word aangemaakt, gebruik ik eerst een validator class die alle velden valideert, op bijvoorbeeld verplichtheid, email, telefoon etc. Maar wat het niet doet is het purifyen van de velden. Zoals je ziet in de constructor pak ik zo alleen de velden die ik nodig heb, dus `new Customer($_REQUEST)`, en in de constructor haal ik alleen het nodige er uit. Is het dan nog handig om in de constructor om elk veld even `htmlspecialchars()` te zetten, om XSS te voorkomen? Aangezien die validator niks doet met de data zelf, behalve dan valideren of ze aan voorwaarden voldoen?
Gewijzigd op 31/05/2022 09:47:07 door Jorn Reed
 
Ward van der Put
Moderator

Ward van der Put

31/05/2022 11:49:04
Quote Anchor link
Jorn Reed op 31/05/2022 08:56:04:
Zoals je ziet in de constructor pak ik zo alleen de velden die ik nodig heb, dus `new Customer($_REQUEST)`, en in de constructor haal ik alleen het nodige er uit. Is het dan nog handig om in de constructor om elk veld even `htmlspecialchars()` te zetten, om XSS te voorkomen? Aangezien die validator niks doet met de data zelf, behalve dan valideren of ze aan voorwaarden voldoen?

In het algemeen zou ik daarop "Nee" antwoorden, maar uiteindelijk hangt het vooral af van waar je de klasse voor gebruikt. Een self-validating class kán handig zijn, bijvoorbeeld wanneer je deze class Customer uitsluitend gebruikt om via een webformulier ontvangen klantgegevens als JSON door te sluizen naar een API.

Gebruik je dezelfde class Customer echter ook in andere situaties, dan is het verstandiger om de validaties buiten de klasse te houden. Dat geldt bijvoorbeeld wanneer je de klantgegevens uit betrouwbare bron haalt, zoals je eigen database. Eerder gecontroleerde gegevens steeds opnieuw valideren is een verspilling van tijd en systeembronnen, en een potentiële bron van lastig op te sporen bugs.
 
Jorn Reed

Jorn Reed

31/05/2022 11:59:26
Quote Anchor link
Ward van der Put op 31/05/2022 11:49:04:
Jorn Reed op 31/05/2022 08:56:04:
Zoals je ziet in de constructor pak ik zo alleen de velden die ik nodig heb, dus `new Customer($_REQUEST)`, en in de constructor haal ik alleen het nodige er uit. Is het dan nog handig om in de constructor om elk veld even `htmlspecialchars()` te zetten, om XSS te voorkomen? Aangezien die validator niks doet met de data zelf, behalve dan valideren of ze aan voorwaarden voldoen?

In het algemeen zou ik daarop "Nee" antwoorden, maar uiteindelijk hangt het vooral af van waar je de klasse voor gebruikt. Een self-validating class kán handig zijn, bijvoorbeeld wanneer je deze class Customer uitsluitend gebruikt om via een webformulier ontvangen klantgegevens als JSON door te sluizen naar een API.

Gebruik je dezelfde class Customer echter ook in andere situaties, dan is het verstandiger om de validaties buiten de klasse te houden. Dat geldt bijvoorbeeld wanneer je de klantgegevens uit betrouwbare bron haalt, zoals je eigen database. Eerder gecontroleerde gegevens steeds opnieuw valideren is een verspilling van tijd en systeembronnen, en een potentiële bron van lastig op te sporen bugs.


In dit geval heb ik ook een CustomerValidator class. Die loopt door alle gegeven velden heen, en returned validatie meldingen indien aanwezig. Zodra `isSuccess()` gelijk is aan true. Dan pas maakt hij de Customer aan, zoals in mijn bericht hier boven, en dat object word via json naar een api gestuurd. Dan gaat dat toch goed zo?
 
Ward van der Put
Moderator

Ward van der Put

31/05/2022 12:18:27
Quote Anchor link
Lijkt me prima.

Je kunt validaties op verschillende niveaus uitvoeren. Het eenvoudigste of ?laagste? niveau zijn guards voor bijvoorbeeld het datatype. Dankzij strict typing kun je die validaties in PHP 8 gebruiken voor eigenschappen en mutators.

Je gebruikt nu bijvoorbeeld nog:

public $email;

maar je kunt expliciet aangeven dat dit een string moet zijn:

public string $email;

Is het e-mailadres niet vereist, dan kun je ook dat aangeven door de eigenschap nullable te maken:

public ?string $email = null;

of:

public string|null $email = null;

Guards zijn dus poortwachters die je code sterker en veiliger maken.
 
Jorn Reed

Jorn Reed

31/05/2022 12:54:55
Quote Anchor link
Ah oke, ja die zijn wel handig, ondanks dat ik ze nooit gebruikt heb, ga ik er in de toekomst toch meer opletten. Toch vroeg ik me dan nog 1 ding af. In die customerValidator, valideer ik alleen de velden, dus doe ik verder niks met de waardes zelf. Waar kan ik dan het beste bijvoorbeeld `htmlspecialchars` op de velden gooien, zodat ze tegen XSS werken?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.