-1 votos

Decode personalizado para JSON con PHP

Tengo una clase :

 class NodoArbolDHTML{
var $id;
var $name;
var $data;
var $children;

public function __construct($id,$name,$resultado,$tipo){
   $this->id = $id;
   $this->name = $name;
   $this->data = new datos($resultado,$tipo);

}

public function anadirHijo($nodoHijo, $id){   
    //anadir un hijo
   if (!isset($this->children)){
      $this->children = array();
   }
   $this->children[$id] = $nodoHijo;
   $this->children = array_values($this->children);

}

}

Con la que puedo crear un objeto de éste tipo: $root= NodoArbolDHTML Object ( [id] => 38358 [name] => Anillo Critico [data] => datos Object ( [color] => #008000 [type] => circle ) [children] => Array ( [0] => NodoArbolDHTML Object ( [id] => 38347 [name] => Transito [data] => datos Object ( [color] => #008000 [type] => circle ) [children] => ) [1] => NodoArbolDHTML Object ( [id] => 43052 [name] => Centros de Acceso [data] => datos Object ( [color] => #008000 [type] => circle ) [children] => ) ) )

Y puedo acceder a un objeto de los del array : print_r($root->children[0]); :

NodoArbolDHTML Object ( [id] => 38347
[name] => Transito [data] => datos Object ( [color] => #008000 [type] => circle ) [children] => )

Luego hago un $arbol=json_encode($root) y obtengo un objeto en notación JSON: // $arbol { "id": "38358", "name": "Anillo Critico", "data": { "$color": "#008000", "$type": "circle" }, "children": [ { "id": "38347", "name": "Transito", "data": { "$color": "#008000", "$type": "circle" }, "children": null }, { "id": "43052", "name": "Centros de Acceso", "data": { "$color": "#008000", "$type": "circle" }, "children": null } ] }

necesito una función dentro de la clase NodoArbolDHTML que haga el proceso inverso, a la que yo le dé el JSON en notación JSON.

De éste modo , podría: •usar la función anadirHijo

•Recorrer el array , buscando el objeto que me interese : print_r($root->children[0]);

NodoArbolDHTML Object ( [id] => 38347 [name] => Transito [data] => datos Object ( [color] => #008000 [type] => circle ) [children] => )

-1voto

Mayte Terrero Puntos30

class NodoArbolDHTML { [...]

    public static function fromJSONObject($jsonObject) {
        $nodo = new NodoArbolDHTML($jsonObject->id, $jsonObject->name, $jsonObject->resultado, $jsonObject->tipo);

        if(count($jsonObject->children) > 0) {
          foreach($jsonObject->children as $child) {
            $nodo->anadirHijo(NodoArbolDHTML::fromJSONObject($child), $child->id);
          }
        }

        return $nodo;
    }
}

$arbol = NodoArbolDHTML::fromJSONObject(json_decode($json));

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: