Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: @XSStringManolo en 23 Diciembre 2019, 19:56 pm



Título: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: @XSStringManolo en 23 Diciembre 2019, 19:56 pm
Estoy pasando un JSON por XHR a una función PHP que hice para hacer requests a directorios.

Me sale un error que no consigo solventar. Me dice: Trying to get nod propertie of non-object.
Y en otra línea: Trying to get nd propertie of non-object.

El echo a $rawReq me imprime el json exactamente igual que como yo lo mandé. El JSON es igual que el del comentario.

Mi pregunta es como solucionar el error, no como hacerlo de otra forma.

Código
  1. /*
  2. Get Request From Client holding list of Domains to hunt, plus list of dictionary urls to get. Expecting a json like:
  3. {
  4. nod: 2,
  5. domain0: "google.com",
  6. domain1: "yahoo.es",
  7. nd: 1,
  8. dictionary0: "raw.github..."
  9. }
  10.  
  11. * domains->nod = number of domains *
  12.  
  13. * domains->nd = number dictionaries *
  14.  
  15. */  
  16. function GRFC(array &$arr)
  17. {
  18. $rawReq = file_get_contents('php://input');
  19. echo "$rawReq";
  20. $domains = json_decode($rawReq);
  21. $temp = "";
  22. $arrayDomains = [];
  23. $x = 0;
  24.  
  25.    for($i = 0; $i < $domains->nod; ++$i)
  26.    {
  27.    $temp = "domain";
  28.    $temp += $i;
  29.    $arrayDomains[i] = $domains->$temp;
  30.    $x = $i;
  31.    }
  32.  
  33.   for($i=0; $x < $domains->nd; ++$x)
  34.   {
  35.   $temp = "dictionary";
  36.   $temp +=$i; ++$i;
  37.   $arr[i] = $domains->$temp;
  38.   }
  39.  
  40. return $arrayDomains;
  41. }
  42. $domainsToHunt = GRFC($dictionariesToHunt);


Título: Re: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: AlbertoBSD en 24 Diciembre 2019, 08:16 am
Acabo de darme cuenta del error, los nombres las propiedades nod, domain0, domain1, nd y dictionary deben de ir entre comillas dobles.

Código:
{
"nod": 2,
"domain0": "google.com",
"domain1": "yahoo.es",
"nd": 1,
"dictionary0": "raw.github..."
}

Saludos!


Título: Re: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: @XSStringManolo en 24 Diciembre 2019, 08:26 am
Acabo de darme cuenta del error, los nombres las propiedades nod, domain0, domain1, nd y dictionary deben de ir entre comillas dobles.

Código:
{
"nod": 2,
"domain0": "google.com",
"domain1": "yahoo.es",
"nd": 1,
"dictionary0": "raw.github..."
}

Saludos!
Entonces porque lo llaman javascript object notation? En js es válido '--

Tenía una función con arrays/strings con el json a mano y al final opté por rescribirla toda como un objeto y pasarle stringify por mi salud mental. xD

Gracias


Título: Re: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: AlbertoBSD en 24 Diciembre 2019, 09:16 am
Entonces porque lo llaman javascript object notation? En js es válido '--

Jajaja ya se, segun tengo entendido del lado de javascript es un poco mas permisivo con los objetos a la hora de procesarlos, pero PHP es mas estricto.

Como mandas tu data desde el cliente javascript, yo utilizo ajax o fetch y nunca he tenido ese tipo de detalles con el PHP en el backend

Código:
data:JSON.stringify(objeto)

Saludos!


Título: Re: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: @XSStringManolo en 24 Diciembre 2019, 15:22 pm
Jajaja ya se, segun tengo entendido del lado de Javascrip es un poco mas permisivo con los objetos a la hora de procesarlos, pero PHP es mas estricto.

Como mandas tu data desde el cliente javascript, yo utilizo ajax o fetch y nunca he tenido ese tipo de detalles con el PHP en el backend

Código:
data:JSON.stringify(objeto)

Saludos!
Uso el submit de los forms o xmlHttpRequest. Fetch no lo uso porque de momento para el tipo de cosas que hago no me aporta mucho y me daría dolores de cabeza tener que mirar como remplazarlo por un polyfill.


Título: Re: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: engel lex en 24 Diciembre 2019, 15:28 pm
js en los navegadores es muuuuuucho mas permisivo que lo que establece el standard, pero usualmente los otros lenguajes se apegan mucho al sandard


Título: Re: JSON PHP return de json_decode($json) no es un objeto?
Publicado por: MinusFour en 24 Diciembre 2019, 19:29 pm
Entonces porque lo llaman javascript object notation? En js es válido '--

Tenía una función con arrays/strings con el json a mano y al final opté por rescribirla toda como un objeto y pasarle stringify por mi salud mental. xD

Gracias

Es un subset de la notación de JS. Tampoco puedes usar números en la notación:

Código
  1. ({ 0:1 , 2:3 }) //js valido, json invalido

La notación solo permite notación de strings como llaves hasta donde yo tengo entendido.