Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

AJBM

Criar um Objecto a partir de um ficheiro Json

Mensagens Recomendadas

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

}

Editado por AJBM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
taviroquai

Hmm deves querer isto:

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

Mas o melhor seria teres algo como:

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por AJBM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);
}

Editado por taviroquai

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.