2013-06-19 7 views
7

मैं एक आरईएसटी एपीआई एंडपिन बना रहा हूं जो एक कंपनी को एक MySQL डेटाबेस में जोड़ता है। क्लाइंट एक संलग्न डेटा पैकेज के साथ एक POST अनुरोध भेजता है। डेटा पैकेज एक JSON ऑब्जेक्ट है। मान लें कि जेएसओएन कंपनी ऑब्जेक्ट को एपीआई का उपयोग करने वाली कंपनी क्लास से बिल्कुल मेल खाने के लिए स्वरूपित किया गया है।मैं PHP क्लास पर JSON ऑब्जेक्ट को कैसे मैप करूं?

मैं कंपनी क्लास में जेएसओएन कंपनी ऑब्जेक्ट डेटा कैसे प्राप्त करूं? कंपनी ऑब्जेक्ट को तत्काल करने के लिए मूर्खतापूर्ण लगता है, json_decode() JSON ऑब्जेक्ट, फिर set() विधियों के दर्जनों को कॉल करें।

यह विशेष रूप से मूर्खतापूर्ण प्रतीत होता है, क्योंकि मैं अपने क्लाइंट पैकेज में वही मॉडल पेश करने की योजना बना रहा हूं जो मेरे एपीआई में जेएसओएन के रूप में पारित होने वाली वस्तुओं को बनाने के लिए, डीकोड किए जाने से पहले, और उसी ऑब्जेक्ट में दोबारा मैप किए गए हैं।

क्या मुझे कुछ याद आ रही है? मैं लगातार उन चीजों के खिलाफ दौड़ रहा हूं जो मेरी एपीआई बनाने के दौरान अनावश्यक लगते हैं, लेकिन शायद यही है कि क्या होना है।

+0

[xson \ _decode कस्टम क्लास के लिए संभावित डुप्लिकेट] (http://stackoverflow.com/questions/5397758/json-decode-to-custom-class) – cweiske

उत्तर

1

आप कंपनी ऑब्जेक्ट में केवल एक विधि क्यों नहीं बनाते हैं जो ऑब्जेक्ट के लिए चर घोषित करता है (आपको प्रत्येक चर के लिए एक सेट विधि लिखने की आवश्यकता नहीं है, केवल एक ही वे सभी चर सेट करेगा)। ताकि आप पैरामीटर के रूप में JSON ऑब्जेक्ट में गुजरती हैं और निर्माता सभी असाइनमेंट हैंडल

//Why not write something like this in the class 
function setFromJSON($json){ 
    $jsonArray = json_decode($json, true); 
    foreach($jsonArray as $key=>$value){ 
     $this->$key = $value; 
    } 
} 
+1

json_decode का दूसरा पैरामीटर सत्य पर सेट होना है, अन्यथा आप कुंजी/मूल्य पुनरावृत्ति नहीं कर सकते हैं। मैंने आपके जवाब में संपादन किया है। – NobleUplift

+0

सच है, मैंने इसे संपादित किया है। सहेजने के लिए धन्यवाद। –

10

तुम क्यों संभाल नहीं है कंपनी वस्तु के निर्माता के सारे है। इस तरह आपको सार्वजनिक सेट विधियों की भी आवश्यकता नहीं है।

$companyData = $_POST['company']; 
//or $companyData = json_decode($_POST['company']); 
//or whatever depending on how you are posting 

class Company { 
    private $companyName; 
    //etc... 
    function __construct(array $data) { 
     foreach($data as $key => $val) { 
      if(property_exists(__CLASS__,$key)) { 
       $this->$key = $val; 
      } 
     } 
    } 
} 
1

JSON डेटा आप वास्तव में प्राप्त करने के लिए डेटा का उपयोग करना चाहते आपत्ति मेल नहीं खाते। डेटाबेस और ऑब्जेक्ट्स में बदलाव आएंगे, और आप नहीं चाहते हैं कि ये आपके द्वारा बनाए गए इंटरफ़ेस को प्रभावित करें और इसके विपरीत।

5

हम स्वचालित रूप से हमारे अपने मॉडल वर्गों पर JSON ऑब्जेक्ट मैप करने के लिए JsonMapper का निर्माण किया।

यह केवल मैपिंग के लिए डॉकब्लॉक प्रकार की जानकारी पर निर्भर करता है, जो कि अधिकांश वर्ग गुणों के वैसे भी है।

संबंधित मुद्दे