请告诉我如何解析这个来自webservice的字符串作为地图。
当我在我的javascript中使用警报时,我得到了响应
{1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt}
我想获取D
键之前的值..
为{"1":"xxx","2":"eee","3":"ddd","4":"rrr"}
在这里输入代码
以及D
值3
以及R
值ttt
提前致谢
答案 0 :(得分:0)
你所拥有的几乎是有效的JSON(JavaScript Object Notation),但并不完全。
例如,JSON要求对属性名称进行双引号。要JSON字符串化TreeMap,您可以尝试从这里开始:How to serialize a Map of a Map with GSON?
或者您可以滚动自己的JSON字符串,如果无法使GSON正常工作:双引用属性名称,双引号字符串值,确保字符串值中的特殊字符被正确转义(反斜杠变为\\
,换行符\n
,双引号变为\"
等。我先试试GSON。
这一切都在网络服务中。现在,在客户端上,您必须将此字符串转换为JavaScript对象。
可能最简单的方法是使用JSON.parse()
在客户端上显式解析它。为此,答案就在这里:How to Parse JSON in JavaScript。
有些人会建议您将webservice的ContentType设置为application/json
并让thingy解析它。很公平,但这个工作正常。
答案 1 :(得分:0)
你正在做双重工作。不知道为什么你会想要这个而不是在服务器上将它格式化为json,而只是将它ajax到格式化为json的客户端。但无论如何,只是回答你的问题 DEMO :
// your stirng '{1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt}';
var MyObjects = [];
//And here is how you use it:
MyObjects = ArrayOfObjects.get('{1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt}', 'D=3');
//{"1":"xxx","2":"eee","3":"ddd","4":"rrr"}
console.log(MyObjects[0]);
//Your alerts you needed
console.log(MyObjects[1].D, MyObjects[1].R);
//Function you need
var ArrayOfObjects = (function(){
var splitOn = function(str, char){
var arr = [], pos = str.indexOf(char);
arr.push(str.slice(1, (pos-1)));
arr.push(str.slice(pos, (str.length - 1)));
return arr;
},
getObj = function (str){
var strNew = str.replace(new RegExp('=', 'g'), ':');
var jsonSTR = strNew.replace(/(\w+)|(\d+)/g, '"$1"');
return JSON.parse("{"+jsonSTR+"}");
};
return {
get: function(string, spl){
var strings=splitOn(string, spl), retArr = [];
strings.forEach(function(str){
retArr.push(getObj(str));
});
return( retArr );
}
};
})();
再次这只是你问题的答案,而不是解决方案。解决方案是在服务器端形成正确的JSON。
答案 2 :(得分:-1)
您可以这样做:
(function(r,x,s,a,k){
r = {};
s = "{1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt}";
a = s.replace(/[{|}]/g, "").split(",");
for(k = 0; k < a.length; k++){
x = a[k].split("=");
if(x[0] == "D" || x[0] == "R") alert(x[1]);
else r[x[0]] = x[1];
}
})();
res是一个对象:
{
1 : xxx,
2 : eee,
3 : ddd,
4 : rrr
}
也许你可以用regexp做同样的事。