2013-05-30 2 views
0

У меня есть проблема с доступом к определенному свойству (hlink) в коде JSON. Это связано с тем, что структура вывода JSON не всегда одинакова, и в результате я получаю следующую ошибку: «Нельзя использовать объект типа stdClass as array in ...». Может ли кто-нибудь помочь мне решить эту проблему?анализировать данные JSON с различными структурами

JSON выход 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 
) 

И это мой код:

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

В принципе, вы должны получить разобранный JSON и изучить его, чтобы увидеть, что у вас есть. (Это помогло бы, если бы мы поняли, на каком языке вы используете. Я угадываю JavaScript, но я не уверен.) –

+0

Довольно часто встречаются случаи, когда другой конец отправляет один «объект», если есть только один, но массив объектов, если их несколько. Один трюк, который я использовал в этом случае, - это проверить первый символ нераспакованного источника JSON и, если он '{', slap '[]' вокруг строки, превратить его в одноэлементный массив. Тогда анализируемый JSON можно рассматривать одинаково, независимо. –

+0

Вы не используете str = JSON.stringify (obj) и JSON.parse (str)? Какой метасимвол выше? Это не JSON. Почему бы вам не представить минимальный пример JSON для начала? – stackunderflow

ответ

0

Предполагая, что это PHP, и вы знаете, что JSON всегда содержит объект или массив объектов, проблема сводится к обнаружению, которое вы получили.

Try что-то вроде:

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

yup this works, спасибо! – user2400821

0

Это непосредственно не отвечая на ваш вопрос, но это должно дать вам средства для расследования проблемы, которые вы имеете.

Пример кода

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)); 

Выход

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 
Смежные вопросы