Hallo,

Ik probeer met onderstaand script een xml terug te krijgen. Op zich lukt dat wel maar sommige items kan ik niet uitlezen en weet niet wat ik verkeerd doe.

<?php
$test = new stdclass;
$test->width = 300;
$graph->height = 250;
$test->title = "test";
//coderen...
$encoded = json_encode($test);

$target = 'http://***/api/index.php?g=' . $encoded;
//xml ophalen
$xml_object = new SimpleXMLElement($target, NULL, TRUE);

if (empty($xml_object->error)) {
echo $xml_object->title;
}
else {
echo 'There was an error: '. $xml_object->error;
}
?>

en in index.php pagina die het xml bestand maakt:
<?php
$decoded = (object)json_decode($_GET['g']);
$title= $decoded->title; // <= wordt niet gelezen...
echo'<?xml version="1.0" encoding="utf-8"?>';
echo'<test>';
echo' <error></error>';
echo' <title>';
echo $title;
echo' </title>';
echo'</test>';

?>

Hoe kan ik die titel uit dat object krijgen? of is dit niet mogelijk?

grtz
Doe eens een var_dump() op $decoded. Dan kan je zien hoe het er intern in het object uitziet.
object(stdClass)[2]
public 'width' => int 300
public 'height' => int 250
public 'title' => string 'test' (length=4)
Die [2] komt op mij een beetje vreemd over. Aangezien het daardoor lijkt alsof je het element met index 2 moet hebben. Alleen zit er zo te zien maar 1 object in.
Probeer eens ofwel:
<?php
echo $decoded[2]->title;
?>
ofwel:
<?php
foreach( $decoded as $obj ){
echo $obj->title;
}
?>
Oops, had mn vardump in verkeerde file staan.
dit is mijn return: object(stdClass)#1 (0) { }

deze komt dus niet aan op m'n externe server.

Doe dan eens een print_r op je $_GET. Krijg je daar wel wat je wilt?
Daar zit deze string in:
{\"width\":300,\"height\":250,\"title\":\"test\"}
Dat is geen correcte JSON string. Bij JSON zouden die slashes er niet in moeten staan. json_decode kan het dan niet correct omzetten en dus krijg je een leeg object terug.

Ofwel je zal de $_GET waarde eerst moet ontdoen van de slashes (met stripslashes() bijvoorbeeld), of je zal de manier waarop je de JSON string opbouwt moeten veranderen.

Overigens vraag ik me ook af waarom je precies een JSON string in een GET waarde stopt. Normaal gesproken zou je elke parameter afzonderlijk ook in je querystring kunnen plaatsen.
Bedankt Erwin, die stripslashes was hier nodig.
Ik begrijp ook niet hoe die slashes in die string komen.
json string wordt gemaakt met de json_encode functie:
$encoded = json_encode($test);

Ik heb ook met de functie decode een tweede parameter op true gezet, zo werd die classe omgezet in een array.

Edit
Op je vraag waarom:
ik probeer een eigen 'remote api' te maken, die ik via een embedded webserver kan aanroepen. (parallax spinneret)
Waarom gaat voornamelijk om het feit dat je het volgens mij ook gewoon met normal querystring parameters kan doen. Zelfs als je uiteindelijk een object wilt doorgeven kan het daar nog mee.

Maar dat is gewoon uit nieuwsgierigheid van mijn kant. Als het voor je werkt, werkt het.

Reageren