括號

2016-06-30 78 views
1

我有一個Servlet括號

Map<String, Object> data = new HashMap<String, Object>(); 
     data.put("x", "[[0, 29.9],[1, 71.5],[3, 106.4]]"); 
     data.put("y", "[[0.5, 28],[1.5, 60],[3, 100]]"); 
     data.put("z","[[0.2, 20],[1.5, 40],[3, 120]]"); 
     JSONObject json = new JSONObject(); 
     json.putAll(data); 
     response.setContentType("application/json"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().println(json); 

,並在我嘗試讀取每個值的頁面下面的代碼,像

$.getJSON("http://localhost:8080/HEC/someservlet", function(data) { 
     $.each(data, function(key, val) { 
      console.log(key+' '+ val); 
     }); 
    }); 

問題是eacch值印刷在控制檯已被除去[]

X 0,29.9,1,71.5,3,106.4

Ÿ0.5,28,1.5,60,3,100

ž0.2,20,1.5,40,3,120

我期待看到這個

X [0,29.9 ],[1,71.5],[3,106.4]]

Y [[0.5,28],[1.5,60],[3100]

Z [[0.2,20],[1.5,40 ],[3,120]]

但是這沒有發生! 任何想法爲什麼刪除括號,可以做些什麼讓他們回來?

謝謝

索林

+0

'[[1,2]'在JSON方面的類型爲'數組[陣列]'不'數組[字符串]' – apokryfos

回答

1

問題:

您從data地圖創建JSON:

data.put("x", "[[0, 29.9],[1, 71.5],[3, 106.4]]"); 
data.put("y", "[[0.5, 28],[1.5, 60],[3, 100]]"); 
data.put("z","[[0.2, 20],[1.5, 40],[3, 120]]"); 

這將導致一個JSON字符串,它看起來像:

{ 
    "x": [[0, 29.9],[1, 71.5],[3, 106.4]], 
    "y": [[0.5, 28],[1.5, 60],[3, 100]], 
    "z": [[0.2, 20],[1.5, 40],[3, 120]] 
} 

現在用JavaScript術語來說,當瀏覽器看到這個結果時,它會將它解釋爲一個帶有鍵的對象,x,y,z,每個鍵都有一個數組數組作爲它的值。這就是爲什麼你沒有在控制檯中顯示[ ],這是因爲[ ]是以JSON表示一個數組,並且在解釋該值之後不再需要它。如果要強制執行字符串嘗試使用:

data.put("x", "\"[[0, 29.9],[1, 71.5],[3, 106.4]]\""); 
data.put("y", "\"[[0.5, 28],[1.5, 60],[3, 100]]\""); 
data.put("z","\"[[0.2, 20],[1.5, 40],[3, 120]]\""); 
+0

非常感謝你,優秀的答案,也許是我的一個愚蠢的問題,作爲JSON和AJAX的初學者... – Sorin