如何使用javascript从JSON访问单个对象

How do I access a single object from JSON wih javascript?

本文关键字:访问 单个 对象 JSON 何使用 javascript      更新时间:2023-09-26

我有一个JSON列表,它来自具有多个同级的数据库中的一个表。

"PlayerNumbers":{"PlayerNumber":[
{"Section":"1","Team":"1","Direction":"N","Number":"00280149","Name":" ANSART A","Updated":"False","TimeLog":"","Processed":"False"},
{"Section":"1","Team":"1","Direction":"S","Number":"00280131","Name":"ANSART Y","Updated":"False","TimeLog":"","Processed":"False"},
{"Section":"1","Team":"2","Direction":"N","Number":"01964990","Name":" LAHAYE B","Updated":"False","TimeLog":"","Processed":"False"}]}

假设我需要阅读"Name"键,其中Section=1,Team=2,Direction=N。

编辑:我当然会使用js解析的对象

Javascript中的语法是什么?

我假设您根本不处理JSON,而是处理从JSON解析的对象树。我假设你给出的是对象定义的内容,比如这个JSON:

{
    "PlayerNumbers": {
        "PlayerNumber": [
            {
                "Section": "1",
                "Team": "1",
                "Direction": "N",
                "Number": "00280149",
                "Name": " ANSART A",
                "Updated": "False",
                "TimeLog": "",
                "Processed": "False"
            },
            {
                "Section": "1",
                "Team": "1",
                "Direction": "S",
                "Number": "00280131",
                "Name": "ANSART Y",
                "Updated": "False",
                "TimeLog": "",
                "Processed": "False"
            },
            {
                "Section": "1",
                "Team": "2",
                "Direction": "N",
                "Number": "01964990",
                "Name": " LAHAYE B",
                "Updated": "False",
                "TimeLog": "",
                "Processed": "False"
            }
        ]
    }
}

因此,在解析了JSON之后,您将得到一个具有PlayerNumbers属性的对象,该属性指代具有PlayerNumber属性的对象。

因此,您循环遍历数组,直到找到第一个匹配条目(假设您只想要第一个):

var name;
obj.PlayerNumbers.PlayerNumber.some(function(entry) {
    if (entry.Section == "1" && Team == "2" && entry.Direction == "N") {
        name = entry.Name;
        return true;
    }
    return false;
});

如果您想要所有匹配:

var names = obj.PlayerNumbers.PlayerNumber.filter(function(entry) {
    return (entry.Section == "1" && Team == "2" && entry.Direction == "N");
}).map(function(entry) { return entry.Name; });

以上两种都使用了过时发动机上缺少的Array的ES5功能。如果您需要支持过时的发动机,以上所有内容都可以"填隙"或"填充聚乙烯",则搜索应找到必要的填隙片/填充聚乙烯。

var playersObject = { 
    "PlayerNumbers": {
    "PlayerNumber": [{
        "Section": "1",
        "Team": "1",
        "Direction": "N",
        "Number": "00280149",
        "Name": " ANSART A",
        "Updated": "False",
        "TimeLog": "",
        "Processed": "False"
    }, {
        "Section": "1",
        "Team": "1",
        "Direction": "S",
        "Number": "00280131",
        "Name": "ANSART Y",
        "Updated": "False",
        "TimeLog": "",
        "Processed": "False"
    }, {
        "Section": "1",
        "Team": "2",
        "Direction": "N",
        "Number": "01964990",
        "Name": " LAHAYE B",
        "Updated": "False",
        "TimeLog": "",
        "Processed": "False"
    }]
    }
};
   function getParticularPlayer(section, team, direction) {
     return playersObject.PlayerNumbers.PlayerNumber.filter(function(player) {
            return (player.Section===section && player.Team===team && player.Direction===direction); 
     });
   }

现在,您可以使用

   var results = getParticularPlayer("1","1","N");

它将返回一系列匹配的玩家。如果您确定始终只返回一个玩家,则可以使用results[0]