2013-05-30 4 views
0

J'ai un problème avec l'accès à une certaine propriété (hlink) dans le code JSON. Cela est dû au fait que la structure de la sortie JSON n'est pas toujours la même, et par conséquent, j'obtiens l'erreur suivante: "Impossible d'utiliser l'objet de type stdClass comme tableau dans ...". Quelqu'un peut-il m'aider à résoudre ce problème?analyse des données JSON avec différentes structures

JSON sortie 1 (Array)

Array ( 
    [0] => stdClass Object ( 
    [hlink] => http://www.rock-zottegem.be/ 
    [main] => true 
    [mediatype] => webresource) 
    [1] => stdClass Object ( 
    [copyright] => Rock Zottegem 
    [creationdate] => 20/03/2013 14:35:57 
    [filename] => b014933c-fdfd-4d93-939b-ac7adf3a20a3.jpg 
    [filetype] => jpeg 
    [hlink] => http://media.uitdatabank.be/20130320/b014933c-fdfd-4d93-939b-ac7adf3a20a3.jpg 
) 

JSON 2

stdClass Object ( 
    [copyright] => Beschrijving niet beschikbaar 
    [creationdate] => 24/04/2013 19:22:47 
    [filename] => Cinematek_F14281_1.jpg 
    [filetype] => jpeg 
    [hlink] => http://media.uitdatabank.be/20130424/Cinematek_F14281_1.jpg 
    [main] => true 
    [mediatype] => photo 
) 

Et voici mon code:

try { 
    if (!empty($img[1]->hlink)){ 
     echo "<img src=" . $img[1]->hlink . "?maxheight=300></img>"; 
    } 
} 
catch (Exception $e){ 
    $e->getMessage(); 
} 
+0

Fondamentalement, vous devez obtenir le JSON et d'examiner analysable, pour voir ce que vous avez. (Cela aiderait si nous avions une idée de la langue que vous utilisez.Je devine JavaScript, mais je ne suis pas sûr.) –

+0

Il est assez fréquent de voir des cas où l'autre extrémité envoie un seul "objet" si il n'y en a qu'un, mais un tableau d'objets s'il y en a plusieurs. Une astuce que j'ai utilisée dans ce cas est d'examiner le premier caractère de la source JSON non analysée, et, si c'est '{', slap '[]' autour de la chaîne pour le transformer en un tableau à un seul élément. Ensuite, le JSON analysé peut être traité de manière identique, indépendamment. –

+0

N'utilisez-vous pas str = JSON.stringify (obj) et JSON.parse (str)? Quel genre de méta syntaxe est ce qui précède? Ce n'est pas JSON. Pourquoi ne présentez-vous pas un exemple JSON minimal valide pour commencer? – stackunderflow

Répondre

0

supposer que ce soit PHP, et vous savez que le JSON contient toujours un objet ou un tableau d'objets, le problème se résume à détecter ce que vous avez reçu.

Essayez quelque chose comme:

if (is_array($img)) { 
    $hlink = $img[0]->hlink; 
} else { 
    $hlink = $img->hlink; 
} 
+0

yup cela fonctionne, merci! – user2400821

0

Ce ne répond pas directement à votre question, mais il devrait vous donner les moyens d'enquêter sur les problèmes que vous rencontrez.

Exemple de code

var obj1 = [ new Date(), new Date() ]; 
var obj2 = new Date(); 
obj3 = "bad"; 
function whatIsIt(obj) { 
    if (Array.isArray(obj)) { 
     console.log("obj has " + obj.length + " elements"); 
    } else if (obj instanceof Date) { 
     console.log(obj.getTime()); 
    } else { 
     console.warn("unexpected object of type " + typeof obj); 
    } 
} 
// Use objects 
whatIsIt(obj1); 
whatIsIt(obj2); 
whatIsIt(obj3); 
// Serialize objects as strings 
var obj1JSON = JSON.stringify(obj1); 
// Notice how the Date object gets stringified to a string 
// which no longer parses back to a Date object. 
// This is because the Date object can be fully represented as a sting. 
var obj2JSON = JSON.stringify(obj2); 
var obj3JSON = JSON.stringify(obj3); 
// Parse strings back, possibly into JS objects 
whatIsIt(JSON.parse(obj1JSON)); 
// This one became a string above and stays one 
// unless you construct a new Date from the string. 
whatIsIt(JSON.parse(obj2JSON)); 
whatIsIt(JSON.parse(obj3JSON)); 

Sortie

obj has 2 elements JsonExample:6 
1369955261466 JsonExample:8 
unexpected object of type string JsonExample:10 
obj has 2 elements JsonExample:6 
unexpected object of type string JsonExample:10 
unexpected object of type string JsonExample:10 
undefined