2017-02-02 3 views
-1

Converting habe ich ein Json wie unten: -ein mehrdimensionales Array zu einem bestimmten Objekt in Php 5.3

{ 
    "_objectClassName": "Transfer_Sales_Order_Item", 
    "_idAttribute": "id_sales_order_item", 
    "_indexDirty": true, 
    "_data": [ 
    { 
     "_attributes": { 
     "history_collection": "Transfer_Sales_Order_Item_Status_HistoryCollection", 
     "merchant": "Transfer_Sales_Order_Item_Merchant", 
     "shipment": "Transfer_Sales_Order_Item_Shipment", 
     "status": "Transfer_Sales_Order_Item_Status", 
     "fk_catalog_shipment_type": null, 
     "warehouse": "Transfer_Sales_Order_Address", 
     "brand": null, 
     "root_category": null, 
     "category": null, 
     "history_log_note": null, 
     "delivery_time": null, 
     "bundle_discount": null, 
     "fk_sku_bundle": null, 
     "is_freebie": null, 
     "shipping_charge": null, 
     "not_buyable": null, 
     "bundle_group": null, 
     "dispatch_time": null, 
     "info_collection": "Transfer_Sales_Order_Item_Additional_Info", 
     "trackinginfo_collection": "Transfer_Sales_Order_Shipment_Tracking_HistoryCollection", 
     "trakinginfo_summarized": null, 
     "status_history": null, 
     "text_collection": "Transfer_Sales_Order_Item_Custom_TextCollection", 
     "returninfo_summarized": null, 
     "refundinfo_summarized": null, 
     "shipping_special_service_info": "Transfer_Sales_Order_Item_Shipping_Special_Service", 
     "payback_credits_value": null, 
     "stock_version": null, 
     "fk_catalog_simple": null, 
     "item_attributes": "Transfer_Sales_Order_Item_Attributes" 
     }, 
     "_defaultValues": { 
     "quantity": 1 
     }, 
     "_data": { 
     "sku": "CA028SH10UTLINDFAS-697382", 
     "fk_catalog_simple": 697382, 
     "name": "Bronze Sandal", 
     "unit_price": 1095, 
     "catalog_tax_class": { 
      "_attributes": { 
      "tax_percent": null 
      }, 
      "_defaultValues": [ 

      ], 
      "_data": { 
      "tax_percent": 0 
      } 
     }, 
     "tax_percent": 0, 
     "original_unit_price": 1095, 
     "shipping_charge": 1, 
     "item_attributes": { 
      "_attributes": { 
      "is_surface": null, 
      "is_fragile": null, 
      "is_precious": null, 
      "seller_discount": 0, 
      "seller_price": 0, 
      "seller_sku": null 
      }, 
      "_defaultValues": [ 

      ], 
      "_data": { 
      "is_surface": 0, 
      "is_fragile": 0, 
      "seller_sku": 1000211001, 
      "seller_price": 0 
      } 
     } 
     } 
    } 
    ] 
} 

, das ich es wie unten beschrieben auf ein bestimmtes Objekt konvertieren möchten: -

Transfer_Sales_Order_ItemCollection Object 
(
    [_objectClassName:protected] => Transfer_Sales_Order_Item 
    [_idAttribute:protected] => id_sales_order_item 
    [_indexDirty:Transfer_AbstractCollection:private] => 1 
    [_data:protected] => Array 
     (
      [0] => Transfer_Sales_Order_Item Object 
       (
        [_attributes:protected] => Array 
         (
          [history_collection] => Transfer_Sales_Order_Item_Status_HistoryCollection 
          [merchant] => Transfer_Sales_Order_Item_Merchant 
          [shipment] => Transfer_Sales_Order_Item_Shipment 
          [status] => Transfer_Sales_Order_Item_Status 
          [fk_catalog_shipment_type] => 
          [warehouse] => Transfer_Sales_Order_Address 
          [brand] => 
          [root_category] => 
          [category] => 
          [history_log_note] => 
          [delivery_time] => 
          [bundle_discount] => 
          [fk_sku_bundle] => 
          [is_freebie] => 
          [shipping_charge] => 
          [not_buyable] => 
          [bundle_group] => 
          [dispatch_time] => 
          [info_collection] => Transfer_Sales_Order_Item_Additional_Info 
          [trackinginfo_collection] => Transfer_Sales_Order_Shipment_Tracking_HistoryCollection 
          [trakinginfo_summarized] => 
          [status_history] => 
          [text_collection] => Transfer_Sales_Order_Item_Custom_TextCollection 
          [returninfo_summarized] => 
          [refundinfo_summarized] => 
          [shipping_special_service_info] => Transfer_Sales_Order_Item_Shipping_Special_Service 
          [payback_credits_value] => 
          [stock_version] => 
          [fk_catalog_simple] => 
          [item_attributes] => Transfer_Sales_Order_Item_Attributes 
         ) 

        [_defaultValues:protected] => Array 
         (
          [quantity] => 1 
         ) 

        [_data:protected] => Array 
         (
          [sku] => CA028SH10UTLINDFAS-697382 
          [fk_catalog_simple] => 697382 
          [name] => Bronze Sandal 
          [unit_price] => 1095 
          [catalog_tax_class] => Transfer_Catalog_Tax_Class Object 
           (
            [_attributes:protected] => Array 
             (
              [tax_percent] => 
             ) 

            [_defaultValues:protected] => Array 
             (
             ) 

            [_data:protected] => Array 
             (
              [tax_percent] => 0 
             ) 

           ) 

          [tax_percent] => 0 
          [original_unit_price] => 1095 
          [shipping_charge] => 1 
          [item_attributes] => Transfer_Sales_Order_Item_Attributes Object 
           (
            [_attributes:protected] => Array 
             (
              [is_surface] => 
              [is_fragile] => 
              [is_precious] => 
              [seller_discount] => 0 
              [seller_price] => 0 
              [seller_sku] => 
             ) 

            [_defaultValues:protected] => Array 
             (
             ) 

            [_data:protected] => Array 
             (
              [is_surface] => 0 
              [is_fragile] => 0 
              [seller_sku] => 1000211001 
              [seller_price] => 0 
             ) 

           ) 

         ) 

       ) 

     ) 
) 

Kann mir jemand sagen, wie dies auf generische Weise erreicht werden kann, da ich einige JSON-Schemata wie oben habe?

Ich bin durch diese question gegangen, aber keine der Antworten scheint mir ziemlich passend zu sein.

Ich bin auch durch diese question gegangen. Die Antworten dort passen nicht zu mir, da in meinem Fall das Attribut selbst ein Objekt sein kann. Beispiel: catalog_tax_class ist vom Typ Transfer_Catalog_Tax_Class.

PHP-Version - 5.3.29.

+0

Ist 'json_decode()' nicht gut genug, um ein Ergebnis oder haben Sie nicht über diese einfache Funktion gehört? – RiggsFolly

+0

Ich möchte den JSON in eine Instanz von Transfer_Sales_Order_ItemCollection konvertieren. Wie kann ich dies mit 'json_decode' erreichen? – tuk

+0

Ein einfaches Nein, das ist nicht das, wonach ich bin, ist ziemlich gut genug. Ich bin ziemlich in der Lage, die Nachricht zu erhalten und meine versuchte Antwort zu löschen – RiggsFolly

Antwort

0

Sie können eine magische __set Methode auf Ihre Klasse wie folgt verwenden:

class Transfer_Sales_Order_ItemCollection 
{ 
    // [...] 
    public function __set($property, $value) 
    { 
     if (property_exists($this, $property)) { 
      $this->$property = $value; 
     } 
    } 
} 

Und wie folgt vor:

$obj = new Transfer_Sales_Order_ItemCollection(); 
foreach ($json as $prop => $value) { 
    $obj->$prop = $value; 
} 
+0

Funktioniert es mit PHP 5.3? – tuk

+0

Ops. Mein Fehler. Es tut nicht. –

+0

Ich habe die Antwort bearbeitet, die zeigt, wie man sie mit magischen Methoden erstellt. –

0

Sie php's magic methods verwenden können generische Getter/Setter und ordnen Sie die Json zu implementieren Daten zu Ihrer internen Struktur.

hier ist ein gutes Beispiel dafür, wie sie benutzen: Getter and Setter?

+0

Können Sie mir ein Beispiel geben, wie diese in meinem Fall verwendet werden können? – tuk

+0

hat einen Link zu einer anderen Diskussion mit einigen Beispielen hinzugefügt. – passioncoder