括号不包括在获得的json中

时间:2016-06-30 10:33:09

标签: json ajax servlets highcharts

我在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]]

但这没有发生! 知道为什么删除括号以及可以做些什么让它们回来?

谢谢,

索林

1 个答案:

答案 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]]\"");