Php - Json -> Object value found, but an array is required

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Marko Westerveld

Marko Westerveld

29/01/2017 10:57:42
Quote Anchor link
Goedemorgen,

Ik probeer een koppeling te maken met MyParcel via JSON, maar krijg steeds de melding:

Object value found, but an array is required

Zo moet het worden:
Quote:
POST https://api.myparcel.nl/shipments HTTP/1.1
Content-Type:application/vnd.shipment+json;charset=utf-8 Authorization:basic **knip**
{
"data":{
"shipments":[
{
"recipient":{
"cc":"NL",
"city":"Hoofddorp",
"street":"Hoofdweg",
"number":"679",
"postal_code":"2131BC",
"person":"Mr. Parcel",
"phone":"0213030315",
"email":"[email protected]"
},
"options":{
"package_type":1,
"only_recipient":1,
"signature":1,
"return":1,
"insurance":{
"amount":50000,
"currency":"EUR"
},
"large_format":0
},
"carrier":1
},
{
"recipient":{
"cc":"NL",
"city":"Amsterdam",
"street":"Dorpstraat",
"number":"123",
"postal_code":"1020BC",
"person":"Mrs. Parcel",
"phone":"02012343546",
"email":"[email protected]"
},
"options":{
"package_type":1,
"only_recipient":0,
"signature":0,
"return":0
},
"carrier":1
}
]
}
}


En dit probeer ik:

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
$responce['data'] = array(
                    "shipments" => array(
                                    "recipient" => array(
                                            "cc" => "NL",
                                            "city" => "Hoofddorp",
                                            "street" => "Hoofdweg",
                                            "number" => "679",
                                            "postal_code" => "2131BC",
                                            "person" => "Mr. Parcel",
                                            "phone" => "01234565789",
                                            "email" => "[email protected]"),
                                    "options" => array(
                                            "package_type" => 1,
                                            "only_recipient" => 1,
                                            "signature" => 1,
                                            "return" => 1,
                                            "insurance" => array(
                                                "amount" => 5000,
                                                "currency" => "EUR"),
                                            "large_format" => 1),
                                    "carrier" => 1
                                    )
                                    );
                                    
                                            
$data_string = json_encode($responce);
Gewijzigd op 29/01/2017 11:09:32 door - Ariën -
 
PHP hulp

PHP hulp

25/12/2024 07:30:12
 
- Ariën  -
Beheerder

- Ariën -

29/01/2017 11:11:52
Quote Anchor link
Wel vreemd, want je bouwt toch echt een array op, die je als JSON-string opslaat. Ik denk dat er misschien is fout gaat bij het verwerken van $data_string?

PS: Het is response ;-)
 
Marko Westerveld

Marko Westerveld

29/01/2017 11:32:33
Quote Anchor link
Als ik print_r data_string doe krijg ik:
{"data":{"shipments":{"recipient":{"cc":"NL","city":"Hoofddorp","street":"Hoofdweg","number":"679","postal_code":"2131BC","person":"Mr. Parcel","phone":"01234565789","email":"[email protected]"},"options":{"package_type":1,"only_recipient":1,"signature":1,"return":1,"insurance":{"amount":5000,"currency":"EUR"},"large_format":1},"carrier":1}}}


En de complete error:
object(stdClass)#1 (2) { ["errors"]=> array(1) { [0]=> object(stdClass)#2 (3) { ["code"]=> int(0) ["fields"]=> array(1) { [0]=> string(14) "data.shipments" } ["human"]=> array(1) { [0]=> string(59) "data.shipments Object value found, but an array is required" } } } ["message"]=> string(73) "Failed validation agains JSON-SCHEMA shipment/post_shipments_request.json" }
 
Ben van Velzen

Ben van Velzen

29/01/2017 12:22:40
Quote Anchor link
Moet het niet dit zijn? Je kunt immers meerdere shipment hebben dus je vergat een array niveau:
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
<?php
$response
['data'] = array(
                    "shipments" => array(
                                        array(
                                        "recipient" => array(
                                                "cc" => "NL",
                                                "city" => "Hoofddorp",
                                                "street" => "Hoofdweg",
                                                "number" => "679",
                                                "postal_code" => "2131BC",
                                                "person" => "Mr. Parcel",
                                                "phone" => "01234565789",
                                                "email" => "[email protected]"),
                                        "options" => array(
                                                "package_type" => 1,
                                                "only_recipient" => 1,
                                                "signature" => 1,
                                                "return" => 1,
                                                "insurance" => array(
                                                    "amount" => 5000,
                                                    "currency" => "EUR"),
                                                "large_format" => 1),
                                        "carrier" => 1
                                        )
                                    )
                                );

                                    
                                            
$data_string = json_encode($response);
?>
 
Marko Westerveld

Marko Westerveld

29/01/2017 12:48:49
Quote Anchor link
Ben eruit!

Ik miste de [ en ] bij Shipments
 
Ben van Velzen

Ben van Velzen

29/01/2017 13:26:44
Quote Anchor link
Klopt, en dat is omdat je een array niveau te weinig had.
 



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.