使用JavaScript解析JSON多个级别

时间:2014-01-28 17:53:43

标签: javascript jquery json parsing themoviedb-api

您好,目前我正在尝试获取特定值,但不完全确定如何。

以下是我正在使用的JSON数据的一部分。数据设置为等于“条目”

 var entries = "credits": {
    "crew": [
        {
            "id": 7469,
            "name": "JimUhls",
            "department": "Writing",
            "job": "Author",
            "profile_path": null
        },
        {
            "id": 7474,
            "name": "RossGraysonBell",
            "department": "Production",
            "job": "Producer",
            "profile_path": null
        },
        {
            "id": 7475,
            "name": "CeánChaffin",
            "department": "Production",
            "job": "Producer",
            "profile_path": null
        },
        {
            "id": 1254,
            "name": "ArtLinson",
            "department": "Production",
            "job": "Producer",
            "profile_path": "/dEtVivCXxQBtIzmJcUNupT1AB4H.jpg"
        },
        {
            "id": 7477,
            "name": "JohnKing",
            "department": "Sound",
            "job": "OriginalMusicComposer",
            "profile_path": null
        },
        {
            "id": 7478,
            "name": "MichaelSimpson",
            "department": "Sound",
            "job": "OriginalMusicComposer",
            "profile_path": null
        },
        {
            "id": 7479,
            "name": "JeffCronenweth",
            "department": "Camera",
            "job": "DirectorofPhotography",
            "profile_path": null
        },
        {
            "id": 7480,
            "name": "JamesHaygood",
            "department": "Editing",
            "job": "Editor",
            "profile_path": null
        },
        {
            "id": 7481,
            "name": "LarayMayfield",
            "department": "Production",
            "job": "Casting",
            "profile_path": null
        },
        {
            "id": 1303,
            "name": "AlexMcDowell",
            "department": "Art",
            "job": "ProductionDesign",
            "profile_path": null
        },
        {
            "id": 7763,
            "name": "RenKlyce",
            "department": "Sound",
            "job": "SoundEditor",
            "profile_path": null
        },
        {
            "id": 7764,
            "name": "RichardHymns",
            "department": "Sound",
            "job": "SoundEditor",
            "profile_path": null
        },
        {
            "id": 7467,
            "name": "DavidFincher",
            "department": "Directing",
            "job": "Director",
            "profile_path": "/dcBHejOsKvzVZVozWJAPzYthb8X.jpg"
        },
        {
            "id": 7468,
            "name": "ChuckPalahniuk",
            "department": "Writing",
            "job": "Novel",
            "profile_path": "/8nOJDJ6SqwV2h7PjdLBDTvIxXvx.jpg"
        }
    ]
}
}

然后我使用以下方法解析数据:

crew_member = 0,
crew_members = [];

for (crew_member = 0; crew_member < entries.credits.crew.length; crew_member++) {
    crew_members.push(entries.credits.crew[crew_member].job + ': ' + entries.credits.crew[crew_member].name);
}

document.getElementById('Crew').innerHTML = crew_members.join(',');

一切都在我的身上。我遇到的问题是如何专门找到导演和导演。

4 个答案:

答案 0 :(得分:2)

这是一个简单的if声明:

for (crew_member = 0; crew_member < entries.credits.crew.length; crew_member++) {
    if (entries.credits.crew[crew_member].job == "Director") {
        crew_members.push(entries.credits.crew[crew_member].job + ': ' + entries.credits.crew[crew_member].name);
    }
}

答案 1 :(得分:1)

你可以过滤这些项目,仍然像这样返回和数组:

entries.credits.crew.filter(function(member){ return member.job === "DirectorofPhotography"  } );

你也可以添加:

 entries.credits.crew.filter(function(member){ return member.job === "DirectorofPhotography"  } ).map(function(member){
 return member.job+ ': ' + member.name;}).join(',');

更新1 这是基于此Object,因为提供的似乎没有正确的格式:

var entries = { "credits" : {"crew":[
            {
                "id": 7469,
                "name": "JimUhls",
                "department": "Writing",
                "job": "Author",
                "profile_path": null
            },
            {
                "id": 7474,
                "name": "RossGraysonBell",
                "department": "Production",
                "job": "Producer",
                "profile_path": null
            },
            {
                "id": 7475,
                "name": "CeánChaffin",
                "department": "Production",
                "job": "Producer",
                "profile_path": null
            },
            {
                "id": 1254,
                "name": "ArtLinson",
                "department": "Production",
                "job": "Producer",
                "profile_path": "/dEtVivCXxQBtIzmJcUNupT1AB4H.jpg"
            },
            {
                "id": 7477,
                "name": "JohnKing",
                "department": "Sound",
                "job": "OriginalMusicComposer",
                "profile_path": null
            },
            {
                "id": 7478,
                "name": "MichaelSimpson",
                "department": "Sound",
                "job": "OriginalMusicComposer",
                "profile_path": null
            },
            {
                "id": 7479,
                "name": "JeffCronenweth",
                "department": "Camera",
                "job": "DirectorofPhotography",
                "profile_path": null
            },
            {
                "id": 7480,
                "name": "JamesHaygood",
                "department": "Editing",
                "job": "Editor",
                "profile_path": null
            },
            {
                "id": 7481,
                "name": "LarayMayfield",
                "department": "Production",
                "job": "Casting",
                "profile_path": null
            },
            {
                "id": 1303,
                "name": "AlexMcDowell",
                "department": "Art",
                "job": "ProductionDesign",
                "profile_path": null
            },
            {
                "id": 7763,
                "name": "RenKlyce",
                "department": "Sound",
                "job": "SoundEditor",
                "profile_path": null
            },
            {
                "id": 7764,
                "name": "RichardHymns",
                "department": "Sound",
                "job": "SoundEditor",
                "profile_path": null
            },
            {
                "id": 7467,
                "name": "DavidFincher",
                "department": "Directing",
                "job": "Director",
                "profile_path": "/dcBHejOsKvzVZVozWJAPzYthb8X.jpg"
            },
            {
                "id": 7468,
                "name": "ChuckPalahniuk",
                "department": "Writing",
                "job": "Novel",
                "profile_path": "/8nOJDJ6SqwV2h7PjdLBDTvIxXvx.jpg"
            }
        ]
    } };

答案 2 :(得分:1)

尝试jquery

jQuery.grep(entries.credits.crew,function(n,i){ return (n.job == "Director") });

这应该会让你返回一系列有导演职位的船员元素。

感谢。

答案 3 :(得分:1)

最简单的方法

entries.credits.crew.filter(function(a){ return a.job == 'Director'; });

您将获得一个单独的对象数组,其中作业是“Director”