【问题标题】:how can I parse json with multiple lines如何用多行解析 json
【发布时间】:2013-02-21 00:02:59
【问题描述】:

我有以下 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"}]

我需要使用 js 函数提取所有“phoneNumber”。 我正在使用 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;     

}

【问题讨论】:

  • 你有什么尝试吗?还是等着别人怎么做你的作业?
  • 我在这里没有看到问题。你试过什么?
  • 即使最初的问题没有包含所有细节,所有这些欢迎新用户的疯狂投票也是完全没有必要的:-(
  • @Christophe 完全同意。

标签: javascript json


【解决方案1】:

对于现代浏览器,您可以使用.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(',');   
}

【讨论】:

    【解决方案2】:

    更新:更好的方法:

    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/

    更新:

    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 []
    

    【讨论】:

    • 感谢您的回复。也许你可以帮我解决我的问题。我想在 vxml 代码中使用这个函数,我正在使用这样的东西: where out = 'info' from your function and test 是函数的名称。我的回复 AppState.out 是这样的:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 可以你帮我吗?
    • 非常感谢,对我帮助很大。
    • 我还有一个问题。如果我的 JSON 有一次像这样的两组值 [{"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557704","mobile":" 400089151"}, {"returnCode":"0","errorMessage":"success","Code":{},"phoneNumber":"400557706","mobile":"400089151"},];有时只有一组像这样的值 {"errorMessage":"success","msisdn":"233714735","phoneNumber":"230557707","re​​turnCode":"0"} 我怎样才能让它工作,因为当我只有一组值时 [] 丢失了。
    • 我更新了上面的代码来回答这个问题。请记住,如果问题的范围不同,您应该考虑一起发布另一个问题。因此,在我的更新中,您可以看到检查 info.length 返回一个值,而 infoSingle.length 返回未定义。我的建议是让它始终返回一个数组 ([]),即使它只有 1 个值。
    【解决方案3】:

    不要试图重新发明轮子。

    解析 JSON 的方法有很多:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多