Bu soru sorulmuştur çağlar önce, ama cevaplar hala doğru görünüyordu. Java ve Javascript arasındaki karmaşık nesneleri geçmeye çalışanların ilgisini çekiyorsa, çözümümüzü sunmak istedim.
NativeObject to (bellek içi) JSON nesnelerini dönüştüren bir betik yazdım (aslında MongoDB'nin BSON tabanlı nesnelerini kullanıyorum, ancak aşağıdaki örnek kodda yalnızca JSONArray ve JSONObject yerine 1-1 yazabilmelisiniz)). Yani, örneğin
, şöyle bazı nesne veya ilgi dizisi, o zaman ben JSON içine (hashmaps yani bir liste) dönüştürebilirsiniz "döner" a (kullanıcı) komut "create_object_script" var ki:
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"
Açıkça "create_object_script" komut dosyası üzerinde denetiminiz varsa bunu tek adımda yapabilirsiniz; benim betiklerim kullanıcı tarafından oluşturulmuş, bu yüzden bu karmaşıklığı saklamak gereklidir - kullanıcılar sadece "geri dönüş değeri" nin son satır olduğu komut dosyaları yazarlar.
Bu gönderinin uzunluğunu korumak için "parsing_script" here'u veriyorum.
Fonksiyonel olarak bu çok güzel çalışır; JS'de geliştirmedim, bu yüzden bunu yapmanın daha verimli yolları var. (Not: Her zaman sonuçlarımda bir listeye ihtiyacım var, eğer yapmıyorsanız, o zaman bir BasicDBObject "outObj" yazabilir ve bunun yerine singleton durumunda yazabilirsiniz).
Bu, dün gece saat 1'de durumumda kendini bulan birini işe yarar.