【问题标题】:brackets not included in the obtained json获取的json中不包含括号
【发布时间】:2016-06-30 10:33:09
【问题描述】:

我在 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);
         });
     });

问题是在控制台打印的每个值都删除了 [ ]

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 ,2 ] ] 在 json 中的类型是 Array[Array] 而不是 Array[String]

标签: json ajax servlets highcharts


【解决方案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]]\"");

【讨论】:

  • 非常感谢您,出色的回答,作为 JSON 和 AJAX 的初学者,也许是我提出的一个愚蠢的问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多