jsonSerialize

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Full Stack Java Developer

Functieomschrijving Ben jij een ervaren Full Stack Java Developer en op zoek naar een internationale, creatieve en innovatieve omgeving? Wil jij werken aan een klanten portaal, waarbij de verschillende diensten vanuit de business via het web portaal worden geleverd aan de klanten van Randstad Groep Nederland? Bij Randstad Groep Nederland (HQ) zijn we op zoek naar jou! Wij zijn op zoek naar een Full Stack Java Developer die per direct ons interne team komt versterken. Full Stack Java Development bij Randstad Groep Nederland (HQ) Jij werkt in het Online Client Solutions team. Dit team werkt samen met de product owner

Bekijk vacature »

Software engineer (front-end developer)

Waar de volledige Harry Potter-serie, 9 miljoen gedigitaliseerde krantenpagina’s en usability samenkomen. Dat is de KB in Den Haag. En het is de plek waar jij als software engineer (front-end) de website van de Digitale Bibliotheek voor de Nederlandse Letteren (DBNL) verbetert voor de 4 miljoen bezoekers per jaar. Maak jij het mogelijk? Dit is je kans om te bouwen aan een unieke website. Zoveel websites voor het vinden van oude krantenartikelen, tijdschriften en alle Nederlandse boeken die er ooit zijn geweest, bestaan er niet. En dan kun je ze ook nog woord voor woord doorzoeken. De bestaande website wordt

Bekijk vacature »

Technical C# Developer (R&D) - Delft

Functieomschrijving Our innovation center is responsible for building some of world most innovative software and hardware. For the department which is focusing on satellite software and underwater robots we are looking for a Mathematical Software Engineer. Responsible for the R&D phases of the Software Building software from scratch! Programming of Mathematical algorithms Willing to develop yourself in the area of software development Functie-eisen BSc. MSc. PhD. related to Mathematics / Informatics / Computer Science or equivalent No experience is needed for this position, we will educate and guide you! Programming with Python and Matlab is a pre Programming with C#

Bekijk vacature »

C++ Developer bij bedrijf die samenwerkt met NASA

Bedrijfsomschrijving Het gaat hier om een innovatief bedrijf die met verschillende bekende bedrijven samenwerkt. Denk aan de Automotive sector, waarbij ze samenwerken met bekende automerken. Daarnaast hebben ze ook NASA en de overheid als partner. Ook werken ze samen met schillende telecombedrijven en met bekende Cloud applicaties. Ze ontwikkelen en produceren zichtbaarheidsoplossingen voor cyber security. Daarnaast werken ze aan monitoring van netwerkprestaties. Ze zijn een toonaangevende fabrikant van innovatieve producten en zijn zelf met hun eigen unieke product ook een koploper in de markt. Het bedrijf is erg professioneel maar het team onderling is erg informeel in de omgang. Er

Bekijk vacature »

Medior Senior C# .NET Software Ontwikkelaar Meldka

Over het bedrijf: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij ontwikkelen concepten op het gebied van veiligheid, gezondheidszorg en communicatie. Is het je passie om software-oplossingen te programmeren? Heb je professionele ervaring met C# en .Net? Vaste baan: Medior Senior C# .NET Software Ontwikkelaar Meldkamersoftware .Net 2.800 - 4.500 Software Engineer Zij werken aan software voor verhogen van de veiligheid via multimedia in bijvoorbeeld de gezondheidszorg. Streaming van live video en audio staan hierbij centraal. We kunnen alarmeringen monitoren en services op afstand verlenen. We zorgen voor een

Bekijk vacature »

(Junior) C#/.NET Developer

NO relocation - Applicants MUST live in the Netherlands! If not, applications will not be handled Due to growth and success we are recruiting a (junior) C#/.NET Developer for the Color Technology team of AkzoNobel to join a senior team in which you can grow and develop yourself as a person and professional Developer Client Details NO relocation - Applicants MUST live in the Netherlands! If not, applications will not be handled AkzoNobel is a multinational with activities in the field of paints and varnishes. They are one of the Key-accounts of Michael Page. Description NO relocation - Applicants MUST

Bekijk vacature »

PHP Software Developer Webapplicaties

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij verzorgen de ontwikkeling van websites, webshops en online marketing. Wil jij webshops, webapplicaties en websites ontwikkelen? Heb je ervaring als PHP developer? Vaste baan: PHP Developer Webapplicaties Javascipt 2.800 - 3.800 PHP Developer Wij houden ons bezig met het aanbieden van internetproducten en diensten zoals websites, webshops en online marketing. Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! Welke taken horen bij

Bekijk vacature »

HANA Developer

Functieomschrijving As Hana developer yourmain task is to analyze, design and implement our DIA’s, realizing our productbacklog as defined by one of our Product Owners. Part of this realizationincluded designing and implementing automated tests (unit- and integrationlevels) and troubleshooting to solve integration issues (through testing andcustomer reports). Working at the cutting edge of tech, you’ll always have new challenges and new problems to solve – and working together is the only way to do that. You won’t work in a silo. Instead, you’ll be part of a creative, dynamic work environment where you’ll collaborate with supportive colleagues. There is always

Bekijk vacature »

Pega development - Trainee pega developer - 601947

Vind jij het leuk om echte business software te maken zonder daarvoor gedetailleerde code te hoeven schrijven? Voor ons hoofdkantoor in Waalwijk zoeken wij een trainee Pega developer voor 36-40 uur per week. Vind jij het leuk om echte business software te maken zonder daarvoor gedetailleerde code te hoeven schrijven? Wij leren je werken met het innovatieve platform van Pega en jij verovert de wereld in elke fase van de digitalisering van ons bedrijf. De Mandemakers Groep, een huis vol mogelijkheden. Je neemt deel aan een geweldig traject. We zijn bezig met de invoering van Customer Service, Sales Automation en

Bekijk vacature »

Back-end Ruby ontwikkelaar

Zoek jij een baan in een unieke branche? Ligt jouw passie bij het ontwikkelen van Back-end Ruby applicaties en wil je in een leuk team werken? Dan past de functie van Back-end Ruby ontwikkelaar perfect bij jou. Ter ondersteuning van de afdeling Engineering zijn wij op zoek naar een Back-end Ruby ontwikkelaar voor 40 uur per week. Back-end Ruby ontwikkelaar Wat ga je doen? Je bent verantwoordelijk voor het ontwikkelen en onderhouden van casino systemen in de cloud. Je komt te werken in een team met een zeer brede kennis van ontwikkelen. Denk hierbij aan Hardware, Front-end, Back-end ontwikkeling in

Bekijk vacature »

.Net Developer Angular

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij lossen complexe IT problemen op. Ben jij een .NET Developer? Heb je ervaring met .NET en Angular? Vaste baan: .Net Developer Angular HBO 3.000 - 4.500 .Net Developer Deze werkgever is een gedreven en ambitieuze club, altijd bezig met de nieuwste technologieën om te zorgen dat onze klanten successen behalen. Samenwerken en innovatie zijn belangrijke kernwaardes: met onze top-expertise in Microsoft technologie ontwikkelen wij innovatieve bedrijfskritische software op maat. Van analyse tot implementatie. Als een ware

Bekijk vacature »

Medior Senior C# Developer Software Zorgsector

Wie wordt jouw werkgever?: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: We maken software waarmee we ouderen met behulp van games, video en muziek helpen te revalideren Heb jij interesse in de vacature voor SilverFit Developer? Heb je ervaring met C# Developer backend? Vaste baan: C# Developer Software Zorgsector HBO 3.000 - 4.500 C# Developer Deze werkgever is een softwarebedrijf, gericht op het ontwikkelen van software en games voor de zorgsector. zij kennen een prettige cultuur. Wij hanteren korte lijnen en er is een informele sfeer. Bij bij hun

Bekijk vacature »

Full stack developer

Lijkt het je leuk je ICT-kennis breed toe te passen in projecten die zowel technisch uitdagend als maatschappelijk relevant zijn? We zoeken een full stack developer om ons snel groeiende, internationale team te versterken. Als full stack developer help je mee om applicaties te ontwikkelen en te verbeteren, op zowel de front-end als de backend. Dit kunnen zowel IT oplossingen zijn in onze ingenieursprojecten als interne applicaties waarmee bedrijfsprocessen worden gedigitaliseerd. Je bent betrokken bij het ontwerpen, ontwikkelen en testen van de webapplicaties. Je zal zowel zelfstandig als in teamverband kwalitatief goede software producten realiseren, waarbij je volop ruimte krijgt

Bekijk vacature »

Business Developer Consultancy Netwerkinfrastructu

Over het bedrijf: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is gespecialiseerd is in Netwerkinfrastructuren en Security. Ben jij geschikt als Business Developer Consultancy? Heb je ervaring met netwerk infrastructuren? Vaste baan: Business Developer Consultancy Netwerkinfrastructuren HBO 3.000 - 5.000 Business Developer Consultancy Wij bedienen klanten met onze gedreven organisatie in geheel Nederland, maar bevinden onze klanten zich ook wereldwijd. Van oorsprong ligt onze focus op de Service Providermarkt maar is de horizon verbreed richting Enterprises en de Groot Zakelijke Markt (MKB-plus). Zij werken voor MKB klanten.

Bekijk vacature »

Ontwikkelaar Webbased Applicaties ASP.NET

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is specialist in het ontwikkelen en implementeren van Security Management en Toegangscontrole systemen. Wil jij werken als Ontwikkelaar Webbased Applicaties? Heb jij kennis van meerdere programmeertalen? Vaste baan: Ontwikkelaar Webbased Applicaties ASP.NET MBO 2.800 - 4.200 Ontwikkelaar Webbased Applicaties De producten portefeuille van het bedrijf bestaat hoofdzakelijk uit: Volledig hybride Voice Loggers; Toegangscontrole en Security Management systemen; Mobiele data en GPS Oriëntatie systemen; Cliënt specifieke software; Wij onderscheiden ons van andere leveranciers doordat het gehele

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

27/06/2022 16:40:38
 
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.