我在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
y 0.5,28,1.5,60,3,100
z 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],[3,100]]
z [[0.2,20],[1.5,40],[3,120]]
但这没有发生! 知道为什么删除括号以及可以做些什么让它们回来?
谢谢,
索林
答案 0 :(得分: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]]\"");