2013-02-21 73 views
-7

我有以下的JSON:我怎么能解析JSON多行

[{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557705","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557706","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557707","mobile":"400089151"}] 

我需要提取所有的“phoneNumber的”使用js函数。 我使用HTML测试,我的功能不是那么好:

function getNumbers(strJSON) 
{ 
      strJSON = "[{\"errorMessage\":\"success\",\"mobile\":\"400089151\",\"phoneNumber\":\"400557704\",\"returnCode\":\"0\"},{\"errorMessage\":\"success\",\"mobile\":\"400089151\",\"phoneNumber\":\"400557705\",\"returnCode\":\"0\"},{\"errorMessage\":\"success\",\"mobile\":\"400089151\",\"phoneNumber\":\"400557706\",\"returnCode\":\"0\"}]"; 

     var len = strJSON.length; 

     var begin_index = strJSON.indexOf("returnCode") - 2; 
     var last_index = len - 1; 
     var string_toSplit = strJSON.substring(begin_index, last_index); 
     var string_splitted = string_toSplit.split("{"); 
     var out=""; 

     alert(strJSON); 
     alert("string_splitted"); 
     alert(string_splitted); 
     for (var i = 0; i < string_splitted.length; i++) 
     { 
      if (string_splitted[i].charAt(string_splitted[i].length - 1) === ",") 
      { 
       string_splitted[i] = string_splitted[i].slice(0, -1); 
      } 
      var json = "{" + string_splitted[i]; 
      var obj = JSON.parse(json); 
      if (i == string_splitted.length) 
      { 
       out = out + obj.phoneNumber; 
      } 
      else 
      { 
       out = out + obj.phoneNumber + ","; 
      } 
     } 
     return out;  

} 
+1

你试一下?或者等待某人做你的功课? – WooCaSh 2013-02-21 00:05:47

+2

我在这里没有看到问题。你有什么尝试? – jmoerdyk 2013-02-21 00:06:58

+1

即使最初的问题并没有包含所有的细节,但所有这些狂欢的赞誉都是不必要的:-( – Christophe 2013-02-21 01:34:54

回答

2

对于现代的浏览器可以使用.map() method

var j = [{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557705","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557706","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557707","mobile":"400089151"}]; 

var phones = j.map(function(item){return item.phoneNumber}); 

更新

看到后你的代码(不要尝试手动分割/解析json字符串..使用JSON.parse方法),你应该使用

function getNumbers(strJSON) 
{ 
    var myJson = JSON.parse(strJSON); 
    return myJson.map(function(item){ return item.phoneNumber}).join(','); 
} 
+0

感谢您的回复。 – Isav 2013-02-21 11:27:20

+0

@Lau查看更新(* after看到你的发布代码*) – 2013-02-21 12:13:28

1

更新:一个更好的方法:

function getNumbers(strJSON) 
{ 
    var obj = JSON.parse(strJSON); 

    return obj.map(x => x.phoneNumber).join(", ") 
} 

原贴:

一个直接的方法是在阵列中的每个对象只是遍历和单独取值。

var info = [{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557705","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557706","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557707","mobile":"400089151"}]; 


var phoneNumbers = []; 

for (var i = 0; i < info.length; i++) 
{ 
    phoneNumbers.push(info[i].phoneNumber); 
} 

console.log(phoneNumbers); 

http://jsfiddle.net/hX69r/

UPDATE:

http://jsfiddle.net/hX69r/1/

var info = [{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557705","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557706","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557707","mobile":"400089151"}]; 

var infoString = JSON.stringify(info); //this just turns the object array 'info' into a string 

var numbers = getNumbers(infoString); 
console.log(numbers); 

function getNumbers(strJSON) 
{ 
    var obj = JSON.parse(strJSON); 

    var phoneNumbers = []; 

    for (var i = 0; i < obj.length; i++) 
    { 
     phoneNumbers.push(obj[i].phoneNumber); 
    } 

    return phoneNumbers.join(", "); 
} 

其他更新:

var info = [{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557705","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557706","mobile":"400089151"}, 
{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557707","mobile":"400089151"}]; 

var infoSingle = {"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":"400089151"}; 

console.log(info.length); // prints 4; so you know it has the [] 
console.log(infoSingle.length); // prints undefined; so you know it doesn't have [] 
+0

感谢您的回应。也许你可以帮助我解决我的问题。我想在vxml代码中使用这个函数,并且使用类似下面的代码: \t where out ='info'from your function and test is the name of the function。My response AppState.out is like this:,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,你能帮我吗? – Isav 2013-02-21 10:25:44

+0

非常感谢,它帮了我很多。 – Isav 2013-02-21 14:57:03

+0

我还有一个问题。如果我的JSON有一次这样的两套值[{“returnCode”:“0”,“errorMessage”:“success”,“Code”:{},“phoneNumber”:“400557704”,“mobile”:“ 400089151“}, {”returnCode“:”0“,”errorMessage“:”success“,”Code“:{},”phoneNumber“:”400557706“,”mobile“:”400089151“},]; 和一些时间只有一组像这样{“errorMessage”:“成功”,“msisdn”:“233714735”,“phoneNumber”:“230557707”,“returnCode”:“0”}我怎么能使它工作,因为当我只有一组值[]缺失时。 – Isav 2013-02-22 01:00:47