2010-09-16 16 views
8

मैं प्ले फ्रेमवर्क के लिए नया हूं, और एक JSON ऑब्जेक्ट को प्रस्तुत करने में परेशानी है।प्ले फ्रेमवर्क रेंडर जेसन समस्या

public static void LoginFail() { 

Object[][] statusArray = { 

    {"Status", "401"}, 
    {"Message", "Unauthorized"}, 
     {"Detail", "No API Key Supplied"} 

    }; 

renderJSON(statusArray); 

} 

यह केवल प्रदर्शित करता है [[{},{}],[{},{}],[{},{}]] ... क्या मैं गलत कर रहा हूँ? मुझे इस पर कोई ठोस दस्तावेज नहीं मिल रहा है। मैंने Application.LoginFail(format:'json') के लिए मार्ग को कॉन्फ़िगर करने का प्रयास किया, लेकिन इससे कुछ भी नहीं हुआ।

उत्तर

11

अपने कोड के दिखने से ऐसा लगता है कि आप ऑब्जेक्ट प्रकार की एक सरणी का उपयोग करके स्वयं द्वारा JSON स्ट्रिंग बनाने की कोशिश कर रहे हैं। मेरा एकमात्र अनुमान यह है कि यह क्यों काम नहीं करता है कि जीएसओएन (प्ले द्वारा उपयोग में जेएसओएन लाइब्रेरी) यह नहीं जानता कि इसे कुंजी-मूल्य जोड़े में कैसे परिवर्तित किया जाए (हालांकि आपकी सरणी 2-आयामी है)। तो कैसे स्ट्रिंग और उसकी सामग्री को statusArray बदलने के बारे में: कि renderJSON(statusArray) में

{ 
    "Status": "401", 
    "Message": "Unauthorized", 
    "Detail": "No API Key Supplied" 
} 

डाल दिया और आप ठीक होना चाहिए।

एक विकल्प के रूप आप एक सरल .json टेम्पलेट निम्नलिखित की तरह बना सकते हैं:

{ 
    "Status": ${status}, 
    "Message": ${message}, 
    "Detail": ${detail} 
} 

और render(status, message, detail) के माध्यम से एक नियंत्रक विधि से यह कहते हैं। status, message और detail स्ट्रिंग्स भी यहां हैं। उदाहरण नियंत्रक विधि:

public static void loginFail(final String status, final String message, final String detail) { 
    render(status, message, detail); 
} 

और अपने टेम्पलेट ही कहा जाता है loginFail.json (नियंत्रक विधि का नाम)। इस तरह आप लॉग इन को सत्यापित करने के लिए जो भी तर्क है उसे नियंत्रक विधि पर कॉल कर सकते हैं। एक बार जब लॉगिन विफल हो जाता है तो आप निर्दिष्ट करते हैं कि loginFail विधि को कॉल करके यह क्यों है (स्थिति, संदेश और विवरण के माध्यम से)।

public static void LoginFail() { 
    Map<String, String> status = new HashMap<String, String>(); 

    status.put("Status", "401"); 
    status.put("Message", "Unauthorized"); 
    status.put("Detail", "No API Key Supplied"); 

    renderJSON(status); 
} 

आप:

+3

यह भी ध्यान देने योग्य बात है कि renderJSON एक स्ट्रिंग तर्क के रूप में अच्छी तरह से जो नजरअंदाज ले जा सकते हैं, के लायक है जीएसओएन पार्सिंग। यह उपयोगी है अगर आप अपने JSON पार्सिंग (जैसे मैं करता हूं) के लिए जैक्सन की तरह कुछ उपयोग करता हूं। –

14

एक StatusMessage वस्तु

public class StatusMessage { 
    public String status; 
    public String message; 
    public String detail; 

    public StatusMessage(String status, String message, String detail) [ 
     this.status = status; 
     this.message = message; 
     this.detail = detail; 
    } 
} 

और फिर

renderJSON(new StatusMessage("401", "Unauthorized", "No API Key Supplied")); 
+0

नोट, यह कक्षा सार्वजनिक होनी चाहिए। यह मेरे लिए आंतरिक वर्ग और कक्षा के लिए काम नहीं करता है, जिसे विधि के अंदर घोषित किया गया था – Anton

0
इस मामले में सबसे अच्छा

एक HashMap प्रयोग किया जाता है बनाने के द्वारा यह सरल & पुन: प्रयोज्य तरह से करते हैं एक और रणनीति का भी उपयोग कर सकते हैं, जो किसी वस्तु को परिभाषित करने के लिए परिभाषित करना है लौट सकते हैं और प्रस्तुत करना इस करना चाहते हैं:

public class Status{ 

    public String status, message, detail; 

    public Status(String status, String message, String detail){ 
     this.status = status; 
     this.message = message; 
     this.detail = detail; 
    } 
} 

public static void LoginFail(){ 
    Status status = new Status("401", "Unauthorized", "No API Key Supplied"); 

    renderJSON(status); 
} 
0

यहाँ आप

import play.libs.Json; 

आप HTTP शरीर के रूप में ब्राउज़र से JSON पढ़ रहे हैं तो

JsonNode json = request().body().asJson();  
Program program = Json.fromJson(json, Program.class); 

यहाँ कार्यक्रम हो सकता है कर सकते हैं क्या है आपके इकाई वर्ग या डेटा परिवहन वस्तु।

आप रिकॉर्ड लाने और JSON में ब्राउज़र को भेजने के लिए है तो कर नीचे

Program program = ProgramDAO.findById(id); 
     if(program!=null){ 
      result = ok(Json.toJson(program)); 
     } 

आशा के रूप में इस मदद करता है

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