来自webservice的Ajax响应——Javascript解析

来自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字符串化,可以尝试从这里开始:

请告诉我如何将来自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字符串化,可以尝试从这里开始:

或者,如果无法让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 );
   }
 };
})();