JSON PHP return de json_decode($json) no es un objeto?

Iniciado por @XSStringManolo, 23 Diciembre 2019, 19:56 PM

0 Miembros y 1 Visitante están viendo este tema.

@XSStringManolo

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 (php) [Seleccionar]
/*
Get Request From Client holding list of Domains to hunt, plus list of dictionary urls to get. Expecting a json like:
{
nod: 2,
domain0: "google.com",
domain1: "yahoo.es",
nd: 1,
dictionary0: "raw.github..."
}

* domains->nod = number of domains *

* domains->nd = number dictionaries *

*/  
function GRFC(array &$arr)
{
$rawReq = file_get_contents('php://input');
echo "$rawReq";
$domains = json_decode($rawReq);
$temp = "";
$arrayDomains = [];
$x = 0;

   for($i = 0; $i < $domains->nod; ++$i)
   {
   $temp = "domain";
   $temp += $i;
   $arrayDomains[i] = $domains->$temp;
   $x = $i;
   }

  for($i=0; $x < $domains->nd; ++$x)
  {
  $temp = "dictionary";
  $temp +=$i; ++$i;
  $arr[i] = $domains->$temp;
  }

return $arrayDomains;
}
$domainsToHunt = GRFC($dictionariesToHunt);

AlbertoBSD

Acabo de darme cuenta del error, los nombres las propiedades nod, domain0, domain1, nd y dictionary deben de ir entre comillas dobles.

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


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

@XSStringManolo

Cita de: 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.

{
"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

AlbertoBSD

#3
Cita de: @?0!,5^34 en 24 Diciembre 2019, 08:26 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

data:JSON.stringify(objeto)

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

@XSStringManolo

Cita de: AlbertoBSD en 24 Diciembre 2019, 09:16 AM
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

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.

engel lex

js en los navegadores es muuuuuucho mas permisivo que lo que establece el standard, pero usualmente los otros lenguajes se apegan mucho al sandard
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MinusFour

Cita de: @?0!,5^34 en 24 Diciembre 2019, 08:26 AM
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 (javascript) [Seleccionar]

({ 0:1 , 2:3 }) //js valido, json invalido


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