【问题标题】:JavaScript map containing arrays turns into map containing maps包含数组的 JavaScript 映射变成包含映射的映射
【发布时间】:2014-04-05 10:16:29
【问题描述】:

我正在创建一个包含数组的地图。 我将此地图作为参数发送到弹出窗口中的方法。

这个数组映射正在弹出窗口中变成一个映射映射!!

我用的是 IE8。

我正在创建这样的地图:

var mapDetails = new Object();
mapDetails.fields = ['A','B'];
mapDetails.optSampleData = ['X','Y'];

我正在发送的地图的 JSON:

{'fields':['A','B'],'optSampleData':['X','Y']}

我正在接收的地图 JSON:

{'fields':{'0':'A','1':'B'},'optSampleData':{'0':'X','1':'Y'}}

这在 JS 中不会有问题,因为数据仍然可以作为字段 [0] 访问。但是,我将它发送到使用 GSON 解析 JSON 的服务器端。 GSON 将其转换为地图。

【问题讨论】:

  • 您究竟是如何“将此映射作为参数发送到弹出窗口中的方法”?您是否使用 JSON 序列化字符串?如果“是”,那么具体使用什么?
  • 我将此对象作为参数传递给弹出窗口中的函数。然后使用 JQuery ajax(到 servlet)将其转发到服务器端。如果从主窗口发送数据,GSON 会将数据转换为包含列表的地图。从弹出窗口中,它被转换为包含 GSON 地图的地图。因此,我尝试使用 JSON.stringify 逐步跟踪。在主页(方法调用之前)stringify 显示包含数组的地图,并在弹出窗口中(在接收方法参数时)显示包含地图的地图。

标签: javascript json internet-explorer internet-explorer-8 gson


【解决方案1】:

试试这个功能

function myParser(str) {

    str = str.replace(/'/g, '"');
    var obj = JSON.parse(str);

    for(var item in obj) {
        if(obj.hasOwnProperty(item)) {
            var array = [];
            for(var arrItem in obj[item]) {
                if(obj[item].hasOwnProperty(arrItem)) {
                    array.push(obj[item][arrItem]);
                }
            }
            obj[item] = array;
        }
    }

    return obj;
}

您可以将接收到的字符串传递给此函数并接收您想要的包含数组的地图

你也可以通过这个函数将你收到的字符串改成你想要的字符串格式:

var str = "{'fields':{'0':'A','1':'B'},'optSampleData':{'0':'X','1':'Y'}}";
var obj = myParser(str);
var desiredFormat = JSON.stringify(obj);
/* The result would be: */ 
/* "{"fields":["A","B"],"optSampleData":["X","Y"]}" */

希望对你有帮助:)

【讨论】:

  • 我想知道根本原因,因为我打算大量使用 JSON/GSON,我不希望有任何意外。无论如何,谢谢。
  • @Teddy 你能提供更多代码吗?例如关于如何将对象从主窗口传递到弹出窗口的代码,或者创建一个小提琴!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多