0

我想使用 JavaScript 使用地图。

如果我使用静态数据,我可以获得预期的输出。

var tempMap={91: "Live", 41: "Aggr-Pack", 92: "Test", 118: "Group", 115: "Inner Cartons", 122: "SNDC", 102: "Web Service", 82: "EXTERNAL_DEF", 137: "PARTIAL", 72: "Return", 112: "Kit Master Cartons", 46: "SHIP", 134: "VEHICLE_TYPE", 121: "SGTIN", 135: "VEHICLE_ID", 45: "DE-COM", 113: "Bulk Cartons ", 136: "VEHICLE_COLOR", 131: "CARRIER", 52: "Invoice Number", 101: "File", 114: "Product Master Cartons ", 81: "GLN", 42: "Kit", 53: "Shipping Number", 47: "RECEIVE", 111: "Pallet", 133: "SHIPMENT_TYPE", 71: "Sale", 43: "DIS", 116: "Kits", 21: "en", 123: "SSCC", 22: "es", 117: "Products", 44: "COM", 132: "EXPECTED_DELIVERY_DATE", 73: "Transfer", 51: "Purchase Order Number"};
var key=116;
alert(tempMap[key]);

我想从响应中创建动态地图。

回应是

"{91=Live, 41=Aggr-Pack, 92=Test, 118=Group, 115=Inner Cartons, 122=SNDC, 102=Web Service, 82=EXTERNAL_DEF, 137=PARTIAL, 72=Return, 112=Kit Master Cartons, 46=SHIP, 134=VEHICLE_TYPE, 121=SGTIN, 135=VEHICLE_ID, 45=DE-COM, 113=Bulk Cartons , 136=VEHICLE_COLOR, 131=CARRIER, 52=Invoice Number, 101=File, 114=Product Master Cartons , 81=GLN, 42=Kit, 53=Shipping Number, 47=RECEIVE, 111=Pallet, 133=SHIPMENT_TYPE, 71=Sale, 43=DIS, 116=Kits, 21=en, 123=SSCC, 22=es, 117=Products, 44=COM, 132=EXPECTED_DELIVERY_DATE, 73=Transfer, 51=Purchase Order Number}"

我使用下面的 javascript 代码修改了 tempMap 数据中给出的响应。

var map=(str.replace(/=/gi,"\"= \"").replace(/,/gi,"\",\"").replace(/=/gi,":"));
map="{\""+map.substring(2,(map.length)-1)+"\"}"

但是我无法通过传递键值来获得输出。我不想使用任何其他第三方来执行此操作。

4

3 回答 3

2

假设将您的响应转换为 JSON 的 RegEx 是正确的(我没有测试它),您必须在使用它之前通过 JSON 解析器传递它。在那之前你所拥有的只是一个字符串。

map= JSON.parse( "{\""+map.substring(2,(map.length)-1)+"\"}" );
于 2012-05-07T10:08:28.697 回答
1

你几乎做对了。

将空白字符添加到第二次替换

var map=(str.replace(/=/gi,"\"= \"").replace(/,\s*/gi,"\",\"").replace(/=/gi,":"));
map="{\""+map.substring(2,(map.length)-1)+"\"}";

这样以后你就可以执行

map = JSON.parse(map);

或者

map = eval("(" + map + ")");

如果您正在处理不支持JSON.

于 2012-05-07T10:17:41.683 回答
0

由于将源字符串评估为 javascript 对象是微不足道的,我假设您在将响应字符串'{91=Live, 41=Aggr-Pack}''{"91": "Live", "41": "Aggr-Pack"}'.

// this pattern matches each attribution and saves references to its left
// and right sides; i.e: after match "41=Aggr-Pack", $2 is "41" and $3 is
// "Aggr-Pack".
var pat = /([\w -]+)=([\w -]+)/gi;

// this uses the referenced matches to build another string;
// i.e: '{91=Live, 41=Aggr-Pack}' -> '{"91": "Live", "41": "Aggr-Pack"}';
var tmp = str.replace(re, '"$2": "$3"');

// the following evaluates the string as a javascript object (you can also
// use eval(tmp):
var map = JSON.parse(tmp)

我希望它能解决你的问题。

于 2012-05-07T10:33:42.163 回答