lứa tuổi Câu hỏi này đã được hỏi trước, nhưng câu trả lời vẫn có vẻ đúng. Trong trường hợp nó quan tâm đến bất cứ ai khác cố gắng để vượt qua các đối tượng phức tạp giữa Java và Javascript, tôi muốn trình bày giải pháp của tôi.
Tôi đã viết một tập lệnh chuyển đổi các đối tượng JSON NativeObject (trong bộ nhớ) (thực ra tôi sử dụng các đối tượng dựa trên BSON của MongoDB, nhưng bạn chỉ có thể thay thế 1-1 cho JSONArray và JSONObject trong mã mẫu bên dưới). Ví dụ: giả sử tôi có một tập lệnh (người dùng) "create_object_script", mà "trả về" một số đối tượng hoặc mảng quan tâm, sau đó tôi có thể chuyển đổi nó thành JSON (ví dụ: danh sách các hashmaps) như sau:
&hl=vi
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"
Rõ ràng nếu bạn có quyền kiểm soát tập lệnh "create_object_script", bạn có thể thực hiện việc này trong một bước; kịch bản của tôi được người dùng tạo ra để ẩn đi sự phức tạp này là cần thiết - người dùng chỉ cần viết tập lệnh trong đó "giá trị trả về" là dòng cuối cùng.
Tôi gisted "parsing_script" here để duy trì độ dài của bài đăng này.
Chức năng này hoạt động rất độc đáo; Tôi đã không phát triển trong JS nhiều vì vậy nó có thể có những cách hiệu quả hơn để làm điều này. (Lưu ý tôi luôn luôn cần kết quả của tôi trong một danh sách, nếu bạn không thì bạn có thể vượt qua trong một BasicDBObject "outObj" và ghi vào đó thay vì trong trường hợp singleton).
Hy vọng điều này sẽ giúp ai đó tìm thấy chính mình trong tình huống của tôi lúc 1 giờ tối qua!
Nguồn
2012-01-06 17:16:00