来自webservice的Ajax响应——Javascript解析
请告诉我如何将来自Web服务的字符串解析为映射 当我在javascript中使用alert时,得到的响应如下 {1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt} 我想得到D键之前的值 as{1:xxx,2:eee,3:ddd,4:rrr} 在这里输入代码 还有一个D值为3的警报 还有一个警报,R值为ttt来自webservice的Ajax响应——Javascript解析,javascript,Javascript,请告诉我如何将来自Web服务的字符串解析为映射 当我在javascript中使用alert时,得到的响应如下 {1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt} 我想得到D键之前的值 as{1:xxx,2:eee,3:ddd,4:rrr} 在这里输入代码 还有一个D值为3的警报 还有一个警报,R值为ttt 提前感谢这里提供的几乎是有效的JSON JavaScript对象表示法,但并不完全有效 例如,JSON要求属性名双引号。要对树映射进行JSON字符串化,可以尝试从这里开始:
提前感谢这里提供的几乎是有效的JSON JavaScript对象表示法,但并不完全有效 例如,JSON要求属性名双引号。要对树映射进行JSON字符串化,可以尝试从这里开始: 或者,如果无法让GSON正常工作,您也可以使用自己的JSON字符串化:双引号将属性名称、双引号字符串值、确保字符串值中的特殊字符正确转义反斜杠变为\、换行符\n、双引号变为\,等等。。我想先试试格森 这些都在网络服务中。现在,在客户端上,您必须将该字符串转换为JavaScript对象 可能最简单的方法是在客户端上使用JSON.parse显式解析它。对此,答案如下:
有些人会建议您将webservice的ContentType设置为application/json,并让thingy解析它。很公平,但这很好用 您可以这样做:
(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];
}
})();
但它似乎没用。。。也许最好从服务API返回JSON。
也许你可以用regexp做同样的事情。你在做双重工作。不确定您为什么希望在服务器上将其格式化为json,而只是将其ajax到格式化为json的客户端。但无论如何,我只想回答你的问题:
同样,这只是对你问题的回答,而不是解决方案。解决方案是在服务器端形成正确的JSON。如何从服务器发送它?将树映射转换为字符串并从服务器返回..我必须将这些值设置为选择下拉框Used Axis 2 webservice如何从java webservice发送JSON对象..请help@user3185790JSON是一个字符串。看起来你已经在发送了。您在客户端上解析它:。。。。对不起,我不是JAVA程序员。。。但我认为您需要返回给您的客户机一个conentType:Application/Json的字符串。。。看看这个答案:@Frogmouth这是一个非常糟糕的答案。您可以使用JSON解析器解析JSON,而不是使用一些脆弱的regex装置,或者更糟糕的是,使用这里的replace/split怪物。我的意思是,这甚至不是一个正确的错误的方法。。。。但是返回的字符串不是JSON。所以如果服务返回一个JSON字符串,JSON解析器就是方法。是的,你在我的方法上。你能给我一个obj,它包含在'D'之前的键值……像'{1:xxx,2:eee,3:ddd,4:rrr}'…不要值'D=3和R=tttb吗?这只是对你问题的回答,但不是解决方案。解决方案是让服务器返回json。让我使用我必须设置到选择下拉框中的值来给出我在javascript中的值。但我无法这样做。我必须使用值来形成选择下拉框,直到'D'和'3'之前,其中D是键,3是值,如wise 1是键和xxx是值,依此类推。使用我的示例如下:MyObjects=arrayofoobjects.get'{1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt}','D=3'//{1:xxx,2:eee,3:ddd,4:rrr}控制台;这是你想要的吗?
{
1 : xxx,
2 : eee,
3 : ddd,
4 : rrr
}
// 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 );
}
};
})();