यह सवाल पूछा गया था उम्र के पहले, लेकिन जवाब अभी भी सही लग रहा था। यदि जावा और जावास्क्रिप्ट के बीच जटिल वस्तुओं को पारित करने की कोशिश कर रहे किसी और के लिए यह रुचि है, तो मैं अपना समाधान प्रस्तुत करना चाहता था।
मैंने एक स्क्रिप्ट लिखी है जो मूल ऑब्जेक्ट (इन-मेमोरी) जेएसओएन ऑब्जेक्ट्स (वास्तव में मैं मोंगोडीबी के बीएसओएन-आधारित ऑब्जेक्ट्स का उपयोग करता हूं, लेकिन आपको नीचे नमूना कोड में JSONArray और JSONObject के लिए 1-1 को प्रतिस्थापित करने में सक्षम होना चाहिए)।
इसलिए उदाहरण के लिए
, कहते हैं कि मैं एक (उपयोगकर्ता) स्क्रिप्ट "create_object_script" है, जो "रिटर्न" किसी वस्तु या ब्याज की सरणी, तो मैं यह JSON में (यानी HashMaps की एक सूची) में परिवर्तित कर सकते हैं इस प्रकार है:
Object returnVal = engine.eval(create_object_script);
engine.put("output", returnVal);
BasicDBObject objFactory = new BasicDBObject(); // (or JSON equivalent)
BasicDBList listFactory = new BasicDBList(); // (or JSON equivalent)
BasicDBList outList = new BasicDBList(); // (or JSON equivalent)
engine.put("objFactory", objFactory);
engine.put("listFactory", listFactory);
engine.put("outList", outList);
engine.eval(parsing_script); // (described below)
// "outList" is now populated with (in-memory) JSON representations of "returnVal"
स्पष्ट रूप से यदि आपके पास "create_object_script" स्क्रिप्ट पर नियंत्रण है तो आप इसे एक ही चरण में कर सकते हैं; मेरी स्क्रिप्ट उपयोगकर्ता जनित तो यह जटिलता दूर छिपा रहे हैं के लिए आवश्यक है - उन सिर्फ स्क्रिप्ट लिखने जहां "वापसी मान" अंतिम पंक्ति है।
मैंने इस पोस्ट की लंबाई को रखने के लिए "parsing_script" here पर जोर दिया।
कार्यात्मक रूप से यह बहुत अच्छी तरह से काम करता है; मैंने जेएस में बहुत कुछ विकसित नहीं किया है, इसलिए यह संभव है कि ऐसा करने के अधिक कुशल तरीके हैं। (ध्यान दें कि मुझे हमेशा एक सूची में अपने परिणामों की आवश्यकता होती है, यदि आप नहीं करते हैं तो आप बेसिक डीबीबीब्जेक्ट "आउटऑबज" में पास कर सकते हैं और इसके बजाय सिंगलटन मामले में लिख सकते हैं)।
आशा है कि यह किसी ऐसे व्यक्ति की मदद करे जो पिछली रात 1 बजे मेरी स्थिति में खुद को पाता है!
स्रोत
2012-01-06 17:16:00