来自webservice的Ajax响应 - 在Javascript中进行分析

时间:2014-01-13 12:55:46

标签: javascript

请告诉我如何解析这个来自webservice的字符串作为地图。

当我在我的javascript中使用警报时,我得到了响应

{1=xxx,2=eee,3=ddd,4=rrr,D=3,R=ttt}

我想获取D键之前的值..

{"1":"xxx","2":"eee","3":"ddd","4":"rrr"}

在这里输入代码

以及D3

的提醒

以及Rttt

的提醒

提前致谢

3 个答案:

答案 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
}

但似乎没用......也许最好从服务API返回JSON。

也许你可以用regexp做同样的事。