Jump to content
AJBM

Criar um Objecto a partir de um ficheiro Json

Recommended Posts

AJBM

Boas!

Eu tenho um ficheiro Json onde tenho informação sobre varios actores, a informacao e esta.

Array ( [0] => Array ( [actorID] => a1 [actorName] => Scarlett Johansson [description] => Scarlett Johansson was born in New York City...... [gender] => F [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BMTUwNzMwMzgyOV5BMl5BanBnXkFtZTcwMjk0ODY1NA@@._V1._SX214_CR0,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm0424060/ ) [1] => Array ( [actorID] => a2 [actorName] => Samuel L. Jackson [description] => Samuel L. Jackson usually played bad guys and drug addicts before becoming an action hero...... [gender] => m [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BMTQ1NTQwMTYxNl5BMl5BanBnXkFtZTYwMjA1MzY1._V1._SX214_CR0,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm0000168/ ) [2] => Array ( [actorID] => a3 [actorName] => Mila Kunis [description] => The talented Milena "Mila" Markovna Kunis was born in Chernivtsi, Ukraine, USSR...... [gender] => F [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BODQyNTQyNzY4MV5BMl5BanBnXkFtZTcwODg5MDA3MQ@@._V1._SY314_CR24,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm0005109/ ) [3] => Array ( [actorID] => a4 [actorName] => Jennifer Lawrence [description] => Actress Jennifer Lawrence, best-known for playing Katniss Everdeen in The Hunger Games, was born in Louisville.... [gender] => F [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BMTM4OTY2MDY1M15BMl5BanBnXkFtZTcwNDYyNDM3NA@@._V1._SY314_CR1,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm2225369/ ) )

eu queria criar um actor com base na informação deste ficheiro, mas nao estou a conseguir..

Eu estou a tentar imprimir

public function carregarParaBaseDados($tipo, $ficheiro) {

	$dados = file_get_contents($ficheiro);
	$json = json_decode($dados, true);

	$actor = new Actor();
//nao funciona
  print $json["actorID"];
//nao funciona, fiz isto porque no formato parece array[0]{array actor}

for($i=0;$i<1;$i++){

foreach ($json as $value) {
	print$json[$i]->getActorID();
}

}

Edited by AJBM

Share this post


Link to post
Share on other sites
taviroquai

Hmm deves querer isto:

actor->id = $json[$i]['actorID']; 

Mas o melhor seria teres algo como:

$actor->import($json[$i]); 

Share this post


Link to post
Share on other sites
AJBM

No teu primeiro caso funciona mas da-me isto notice: Undefined index: actorID in C:\xampp\htdocs\AlugaMeEsteFilme\Negocio\OperacoesSite.php on line 196

no teu segundo caso o import, tenho de definir lo ou ele já vem definido?

Share this post


Link to post
Share on other sites
yoda

Usando esta classe podes atribuir os valores do JSON a um objecto PHP :

class Actor
{
private $attributes = array();
   public function __get($key)
   {
 if (array_key_exists($key, $this->attributes))
 {
  return $this->attributes[$key];
 }

 return false;
   }
   public function __set($key, $value)
   {
 $this->attributes[$key] = $value;

 return;
   }   
}

Incluis o código acima no PHP (pode ser no fim do ficheiro)

Para usar basta isto :

$actor = new Actor();

foreach ($json as $key=>$value)
{
$actor->$key = $value;
}

echo $actor->actorName;

Share this post


Link to post
Share on other sites
AJBM

Usando esta classe podes atribuir os valores do JSON a um objecto PHP :

class Actor
{
private $attributes = array();
public function __get($key)
{
 if (array_key_exists($key, $this->attributes))
 {
  return $this->attributes[$key];
 }

 return false;
}
public function __set($key, $value)
{
 $this->attributes[$key] = $value;

 return;
}  
}

Incluis o código acima no PHP (pode ser no fim do ficheiro)

No ficheiro json??? ou na minha classe actor eu inclui na minha classe actor

Para usar basta isto :

$actor = new Actor();

foreach ($json as $key=>$value)
{
$actor->$key = $value;
}

echo $actor->actorName;

Não esta a funcionar,

se eu fizer print_r($actor) imprime o conteúdo do array mas se eu so quiser o nome nao da

PS: eu disse em cima que o ficheiro continha a informação de um autor mas contem a informação de vários autores, so reparei nisso agora

Depois de eu ter os actores criados, quero carrega los para uma base dados, será melhor eu carregar a informação directamente como esta no ficheiro json ou crio primeiro os actores e depois carrego para a base dados

Edited by AJBM

Share this post


Link to post
Share on other sites
taviroquai

@AJBM

Queria dizer isto...

Define um método import na tua classe Actor

public function import($arr) {
if (!is_array($arr)) return false;
foreach ($arr as $key=>$value) {
	if (isset($this->$key)) $this->$key = $value;
}
return true;
}

Agora podes usar nesse ficheiro que lê o JSON...

$lista = array();
foreach ($json as $item) {
$actor = new Actor();
if ($actor->import($item)) $lista[] = $actor;
}

Depois de eu ter os actores criados, quero carrega los para uma base dados, será melhor eu carregar a informação directamente como esta no ficheiro json ou crio primeiro os actores e depois carrego para a base dados

Se não precisas fazer nada com os objectos Actor antes de colocar na base de dados, não precisas criar os objectos... a não ser se tenhas algum mecanismo nos objectos que permitar guardá-los na base de dados... mas mais eficiente será fazer um foreach ao JSON e colocar numa query para salvar os dados, algo assim:

foreach ($json as $item) {
// query para salvar os dados, por exemplo com PDO
$pdo->query('INSERT INTO (bla, bla, bla) VALUES (?, ?, ?)', $item);
}

Edited by taviroquai

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.