Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

junior.vieira

Parsear JSON de retorno

Recommended Posts

Pessoal, seguinte, estou fazendo um whois no registro br, uso a função $response = file_get_contents("https://rdap.registro.br/domain/DOMINIO", false, stream_context_create($arrContextOptions));

e o retorno é um json, eu preciso guardar no bd as informações do JSON. Porém eu preciso percorrer o json que possuem vários indicies, objetos e arrays dentro, segue o json: eu preciso de alguma forma percorrer o json e armazenar as informações num bd, eu cheguei a percorrer ele com foreach, mas ele tem vários nível de encadeamento, PARA AJUDAR A ENTENDER EU JOGUEI O JSON NO NOTEPAD++ E FUI OCULTANDO OS NÍVEIS. Alguem pode me ajudar?

{
"objectClassName": "domain",
"handle": "aaam.com.br",
"ldhName": "aaam.com.br",
"nameservers": [{
"objectClassName": "nameserver",
"ldhName": "ns1.pleskw0021.hospedagemdesites.ws",
"events": [{
"eventAction": "delegation check",
"eventDate": "2016-02-24T08:47:46Z",
"status": ["ns aa"]
}, {
"eventAction": "last correct delegation check",
"eventDate": "2016-02-24T08:47:46Z"
}]
}, {
"objectClassName": "nameserver",
"ldhName": "ns2.pleskw0021.hospedagemdesites.ws",
"events": [{
"eventAction": "delegation check",
"eventDate": "2016-02-24T08:47:46Z",
"status": ["ns aa"]
}, {
"eventAction": "last correct delegation check",
"eventDate": "2016-02-24T08:47:46Z"
}]
}],
"secureDNS": {
"delegationSigned": false
},
"nicbr_arbitration": true,
"links": [{
"value": "https://rdap.registro.br/domain/aaam.com.br",
"rel": "self",
"href": "https://rdap.registro.br/domain/aaam.com.br",
"type": "application/rdap+json"
}, {
"value": "https://rdap.registro.br/domain/aaam.com.br",
"rel": "related",
"href": "https://rdap.registro.br/domain/aaam.com.br?ticket=14435391",
"type": "application/rdap+json"
}],
"entities": [{
"objectClassName": "entity",
"handle": "65683510759",
"vcardArray": ["vcard", [
["version", {}, "text", "4.0"],
["kind", {}, "text", "organization"],
["fn", {}, "text", "JOSE BENTO DE ALMEIDA"]
]],
"roles": ["registrant"],
"publicIds": [{
"type": "cpf",
"identifier": "656.835.107-59"
}],
"entities": [{
"objectClassName": "entity",
"handle": "JOBAL145",
"vcardArray": ["vcard", [
["version", {}, "text", "4.0"],
["kind", {}, "text", "individual"],
["fn", {}, "text", "JOSE BENTO DE ALMEIDA"],
["email", {}, "text", "CAMAGNATONE@hotmail.com"],
["lang", {}, "language-tag", "PT"]
]],
"roles": ["administrative"],
"events": [{
"eventAction": "registration",
"eventDate": "2014-08-18T15:17:26Z"
}, {
"eventAction": "last changed",
"eventDate": "2015-07-15T17:55:10Z"
}],
"links": [{
"value": "https://rdap.registro.br/entity/JOBAL145",
"rel": "self",
"href": "https://rdap.registro.br/entity/JOBAL145",
"type": "application/rdap+json"
}]
}],
"events": [{
"eventAction": "registration",
"eventDate": "2014-08-18T15:23:29Z"
}, {
"eventAction": "last changed",
"eventDate": "2014-08-18T15:23:29Z"
}],
"links": [{
"value": "https://rdap.registro.br/entity/65683510759",
"rel": "self",
"href": "https://rdap.registro.br/entity/65683510759",
"type": "application/rdap+json"
}],
"legalRepresentative": "JOSE BENTO DE ALMEIDA"
}, {
"objectClassName": "entity",
"handle": "JOBAL145",
"vcardArray": ["vcard", [
["version", {}, "text", "4.0"],
["kind", {}, "text", "individual"],
["fn", {}, "text", "JOSE BENTO DE ALMEIDA"],
["email", {}, "text", "CAMAGNATONE@hotmail.com"],
["lang", {}, "language-tag", "PT"]
]],
"roles": ["administrative", "billing"],
"events": [{
"eventAction": "registration",
"eventDate": "2014-08-18T15:17:26Z"
}, {
"eventAction": "last changed",
"eventDate": "2015-07-15T17:55:10Z"
}],
"links": [{
"value": "https://rdap.registro.br/entity/JOBAL145",
"rel": "self",
"href": "https://rdap.registro.br/entity/JOBAL145",
"type": "application/rdap+json"
}]
}, {
"objectClassName": "entity",
"handle": "PSDSL3",
"vcardArray": ["vcard", [
["version", {}, "text", "4.0"],
["kind", {}, "text", "individual"],
["fn", {}, "text", "Portall System Desenv. de Sistem. Ltda"],
["email", {}, "text", "registro@portall.com.br"],
["lang", {}, "language-tag", "PT"]
]],
"roles": ["technical"],
"events": [{
"eventAction": "registration",
"eventDate": "2010-05-24T05:20:30Z"
}, {
"eventAction": "last changed",
"eventDate": "2011-02-15T16:50:45Z"
}],
"links": [{
"value": "https://rdap.registro.br/entity/PSDSL3",
"rel": "self",
"href": "https://rdap.registro.br/entity/PSDSL3",
"type": "application/rdap+json"
}]
}],
"events": [{
"eventAction": "registration",
"eventDate": "2015-07-15T18:02:09Z"
}, {
"eventAction": "last changed",
"eventDate": "2015-12-28T16:49:53Z"
}, {
"eventAction": "expiration",
"eventDate": "2016-07-15T18:02:09Z"
}],
"status": ["active"],
"notices": [{
"title": "Terms of Use",
"description": ["Copyright (c) NIC.br", "The use of the data is only permitted as described in", "full by the terms of use, being prohibited its ", "distribution, commercialization or reproduction, in ", "particular, to use it for advertising or any similar ", "purpose."],
"links": [{
"value": "https://rdap.registro.br/domain/aaam.com.br",
"rel": "alternate",
"href": "https://registro.br/termo/en.html",
"type": "text/html"
}]
}],
"rdapConformance": ["rdap_level_0", "nicbr_level_0"]
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, já usei, o problema é que tem vários arrays dentro

 

segue código

function Percorre($json){ //contem todo json acima 
	foreach ($json as $key => $value) {
		if(is_array($value)){//ao meu ver, se achar um indice que seja array trasnforma para objeto e chama a funcao recursiva.		
			$aux = json_encode($key);
			$aux = (object) json_decode($key);
			Percorre($aux);
		}
		echo $key.'<br>';			
	}

}

mas veja veu retorno,

objectClassName
handle
ldhName
nameservers
secureDNS
nicbr_arbitration
links
entities
events
status
notices
rdapConformance

Se reparar no JSON la em cima, ele traz apenas os Objetos "PAIS/RAIZ" se eu der

echo echo $key.'-'.$value.'<br>';

ele gera o erro

objectClassName-domain
handle-aaam.com.br
ldhName-aaam.com.br


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 199

nameservers-Array


Catchable fatal error:  Object of class stdClass could not be converted to string in C:\xampp\htdocs\produban\dominio\funcoes.php on line 199

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo dando json_decode($json, true); ele parece nao mudar tudo para array segue erro,

objectClassName-domain
handle-aaam.com.br
ldhName-aaam.com.br


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

nameservers-Array


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

secureDNS-Array
nicbr_arbitration-1


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

links-Array


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

entities-Array


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

events-Array


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

status-Array


Notice:  Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

Foreach de exemplo :

foreach ($json as $key => $value) {
 echo $key.'-'.$value.'<br>';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo dando json_decode($json, true); ele parece nao mudar tudo para array segue erro,

Exatamente o contrário, tudo é transformado para um array, veja o erro (sublinhei):

 

Notice: Array to string conversion in C:\xampp\htdocs\produban\dominio\funcoes.php on line 25

 

status-Array

Observe que você está dando echo em um array ($value), logo Array to string, e por isso que ele imprime apenas "Array" depois do hífen.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você acessa da mesma forma que está fazendo, coloca outro foreach dentro e assim vai indo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso que eu não queria fazer, logo pelo começo via que a quantidade de foreach vai depender de quantas iterações eu tenho, só que, isso fica fixo, quem solta esse json é a registro br, e se por ventura...um dia...eles mudarem o padrao de json? eu vou ter que reescrever a funcao, eu pensei aqui em algo assim, uso recursividade e um outro arrayglobal, o ideia pelo que pensei, seria Desmembrar o json inteiro, um unico array, e não arrays multidimensionais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai fica a seu critério a resolução... não vejo essa questão da mudança do padrão como algo realmente preocupante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se uma empresa disponibiliza uma API, é bem pouco provável que o padrão seja alterado sem aviso prévio

 

Se hoje uma informação está em array[indice1][indice2][indice3][indice4], você vai acessar diretamente essa informação e isso não deve mudar, desde que a empresa não mude sua API

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.