2012-12-12 41 views
5

Tôi có một Bản đồ Java. Tôi muốn chuyển đổi nó sang bản đồ JavaScript.Chuyển đổi Bản đồ Java thành Bản đồ Javascript

Chức năng java để chuyển đổi dưới dạng bản đồ JS sau:

private Object getJSLocalizedValueMap() { 

    Map<String, String> langSel = new HashMap<String, String>(); 
    langSel.add("en", true); 
    langSel.add("de", false); 
    langSel.add("fr", false); 

    //Now convert this map into Javascript Map 
    NativeObject nobj = new NativeObject(); 
    ScriptEngineManager factory = new ScriptEngineManager(); 
    ScriptEngine engine = factory.getEngineByName("javascript"); 
    for (Map.Entry<String, String> entry : langSel.entrySet()) { 
     nobj.defineProperty(entry.getKey(), entry.getValue(), NativeObject.READONLY); 
    } 
    engine.put("langSel", nobj); 
    return langSel; 
} 

Trong trang JSP javascript mã là:

var langs = ${messagesJS}; 

Trong javascript, tôi nhận:

langs = {en=true, de=false, fr=false}; 

thay vì

langs = {"en":true, "de":false, "fr":false} 

Hãy gợi ý cho tôi cách đạt được điều này?

+1

Có lý do nào bạn cần ** để có các khóa được bọc trong dấu ngoặc kép không? Bạn đã có đối tượng JavaScript hợp lệ. Nếu đó là một yêu cầu tuyệt đối (và, một lần nữa, tôi không thể nghĩ ra một lý do duy nhất tại sao nó sẽ là), hãy xem trả lại [JSON] (http://json.org). –

Trả lời

5

Bạn có thể sử dụng lớp học JSONObject cho việc này. Nó có một hàm tạo mà bạn truyền vào trong một Map. Gọi và sau đó gọi phương thức toString() và nó sẽ cung cấp cho bạn một mảng JS.

http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject%28java.util.Map%29

Vì vậy, một cái gì đó như:

Map<String, String> langSel = new HashMap<String, String>(); 
langSel.add("en", true); 
langSel.add("de", false); 
langSel.add("fr", false); 

JSONObject jsonObj = new JSONObject(langSel); 
engine.put("langSel", jsonObj.toString()); 

Bạn sẽ cần phải chắc chắn rằng các lớp org.json.JSONObject là trên classpath của bạn. Hoặc tải về JAR và thêm vào classpath bằng tay (thông qua Eclipse hoặc một cái gì đó) hoặc nếu bạn đang sử dụng Maven sử dụng một sự phụ thuộc như sau:

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20070829</version> 
    </dependency> 

Nếu bạn không sử dụng Maven, bạn vẫn có thể tải về JAR từ đây : http://mvnrepository.com/artifact/org.json/json/20090211

+0

Cách lấy lớp JSONObject. Nó đang tạo ra đường dẫn lớp không tìm thấy. – Rajasekhar

+0

Đã cập nhật câu trả lời – cowls

+0

Cảm ơn những tiếng bò, tôi có thể thêm vào đường dẫn lớp học. Nhưng, tôi vẫn nhận được chuỗi là {en = true, de = false, fr = false} (bản đồ JSP) thay vì {"vi": true, "de": false, "fr": false} (bản đồ javaScript)) trong trang JSP. – Rajasekhar

1

Thay vì dòng dưới đây

langSel.add("en", true); 

sử dụng dòng này

langSel.add("\"en\"", true); 

Hãy thử tính năng này có thể hữu ích.

Các vấn đề liên quan