2015-06-23 4 views
1

У меня есть эта JSon структуру:Как десериализовать вложенный массив json в php?

[ 
    {"product": 
      {"category_id":1, 
       "created_at":"2015-06-13 17:49:58", 
       "description":"CF77 COIN FINDER", 
       "url_image":"IMG_76ECDC-707E7E-70AC81-0A1248-4675F3-F0F783.jpg", 
       "name":"CF77 COIN FINDER", 
       "pid":12, 
       "price":500.0 
      }, 
    "product_quantity":3 
    }, 
    {"product": 
      {"category_id":1, 
       "created_at":"2015-06-13 17:49:58", 
       "description":"JEOSONAR 3D DUAL SYSTEM", 
       "url_image":"IMG_2D9DF0-2EB7E9-ED26C0-2C833B-B6A5C5-5C7C02.jpg", 
       "name":"JEOSONAR 3D DUAL SYSTEM", 
       "pid":15, 
       "price":500.0 
      }, 
    "product_quantity":1 
    } 
] 

И для десериализации, я создал эти два класса

Класс продукта:

class Product 
{ 
    public $pid; 
    public $name; 
    public $price; 
    public $category_id; 
    public $url_image; 
    public $description; 
    public $created_at; 
    public $updated_at; 

    public function __construct($pid, $name, $price, $category_id, $url_image, $description, $created_at, $updated_at) 
    { 
     $this->pid = $pid; 
     $this->name = $name; 
     $this->price = $price; 
     $this->category_id = $category_id; 
     $this->url_image = $url_image; 
     $this->description = $description; 
     $this->created_at = $created_at; 
     $this->updated_at = $updated_at; 
    } 

    public static function createFromJson($jsonString) 
    { 
     $object = json_decode($jsonString); 
     return new self($object ->pid, $object ->name, $object ->price, $object ->category_id, $object ->url_image, $object ->description, $object ->created_at, $object ->updated_at); 
    } 

} 

Command Класс:

class Command { 

    public $product; 
    public $product_quantity; 

    public function __construct($product, $product_quantity){ 
     $this->product=$product; 
     $this->product_quantity=$product_quantity; 
    } 

    public static function createFromJson($jsonString) 
    { 
     $object = json_decode($jsonString); 
     return new self(Product::createFromJson($object->product), $object ->product_quantity); 
    } 

} 

Для простой структуры json я могу использовать метод createFromJson, но для массивов я не смог найти способ десериализации вышеупомянутой структуры json.

Как я могу десериализовать структуру массива json?

+2

$ object = json_decode ($ jsonString, true); используйте это – Ramki

ответ

0

Я бы просто удостоверился, что это всегда массив, и вернемся на это. Я полагаю, что-то вроде этого:

public static function createFromJson($jsonString) 
{ 
    $json = json_decode($jsonString); 
    if (!is_array($json)) $json = array($json); 
    $return = array(); 
    foreach($json as $object) { 
     $return[] new self(Product::createFromJson($object->product), $object ->product_quantity); 
    } 
    return count($return) == 1 ? $return[0] : $return; 
} 

Это будет захватывать все команды в массиве и возвращать только одну команду, если только один был расшифрован. Хотя, лично я всегда возвращал массив, поэтому метод имеет единственный тип возврата.

Смежные вопросы