查询JSON文件以获取数组中的位置

时间:2016-03-27 16:57:38

标签: javascript html json

我正在尝试查询JSON文件以设置数组的位置。例如,我的JSON文件的片段显示在下面:

  { "result": [{
        "summonerLevel": "0",
        "summonerID": "0",
        "summonerName": "",
        "summonerIcon": "0"
    }, {
        "summonerLevel": "30",
        "summonerID": "76767383",
        "summonerName": "Solminor",
        "summonerIcon": "916"
    }, {
        "summonerLevel": "30",
        "summonerID": "25470907",
        "summonerName": "Dahid",
        "summonerIcon": "959"
    }, {
        "summonerLevel": "30",
        "summonerID": "72118343",
        "summonerName": "Truehaven",
        "summonerIcon": "956"
    }]
}

目前,我已将数组的位置硬编码为1,返回“Solminor”级别为“30”:

dbsummonerLevel = json.result[1].summonerLevel;

我在我的html页面上显示了这个变量:

document.getElementById("sLevel").innerHTML = dbsummonerLevel;

我想替换[1]的数组位置,以返回与用户输入的"summonerName"相关联的所有元素。

EG。用户输入"Dahid",我希望数组位置为[2]或"Truehaven",将数组位置设置为[3]

编辑:我想补充一点,我的JSON数据是一个单独的php文件,并且一直在从mysql数据库进行更新,我无法将json文件存储在我的javascript中,我不认为。

5 个答案:

答案 0 :(得分:0)

这样的东西来获取数据

function getSummonerData(name, data) {
  for (var i = 0; i < data.result.length; i++) {
    if (data.result[i].summonerName === name) {
      return data.result[i];
    }
  }
}
var data = {
  "result": [{
    "summonerLevel": "0",
    "summonerID": "0",
    "summonerName": "",
    "summonerIcon": "0"
  }, {
    "summonerLevel": "30",
    "summonerID": "76767383",
    "summonerName": "Solminor",
    "summonerIcon": "916"
  }, {
    "summonerLevel": "30",
    "summonerID": "25470907",
    "summonerName": "Dahid",
    "summonerIcon": "959"
  }, {
    "summonerLevel": "30",
    "summonerID": "72118343",
    "summonerName": "Truehaven",
    "summonerIcon": "956"
  }]
};
console.log(getSummonerData("Truehaven", data));
结果:

  {
    "summonerLevel": "30",
    "summonerID": "72118343",
    "summonerName": "Truehaven",
    "summonerIcon": "956"
  }

然后你可以用汇总数据做你想做的事情

答案 1 :(得分:0)

使用.filter,返回的是新数组,其中只包含该函数返回true的元素。

var summonersWithName = json.filter(function (summoner){
    summoner.summonerName === NAME_THE_USER_TYPED_IN
})

答案 2 :(得分:0)

您可以创建自定义函数,例如

function findIndexBy(property, value) {
  return this.findIndex(item => item[property] === value);
}

并将其用作

findIndexBy.call(arr, 'summonerName', 'Dahid');

您可以将其添加到数组原型中以方便使用。但不推荐使用它,因为如果语言使用此方法名称,可能会发生冲突。

Array.prototype.findIndexBy = function findBy(property, value) {
  return this.findIndex(item => item[property] === value);
}

arr.findIndexBy('summonerName', 'Dahid');

如果您想要整个对象而不是索引,请将findIndex替换为find

答案 3 :(得分:0)

// Assuming 'userdata' is your initial object

function getDataByName(userdata, name){
    if (typeof name !== "string") throw new Error("Wrong name!");

    var userdata = userdata.result, len = userdata.length;
    while (len--) {
        if (userdata[len]['summonerName'] === name) {
            return userdata[len];
        }
    }
    return false;
}

var user = getDataByName(userdata, 'Dahid');
console.log(user);
// output: {summonerLevel: "30", summonerID: "25470907", summonerName: "Dahid", summonerIcon: "959"}

document.getElementById("sLevel").innerHTML = user.summonerLevel;

答案 4 :(得分:0)

最终我决定根据用户输入创建一个JSON查询。因此,当用户键入用户ID时,将形成一个MySql查询,该查询将构建特定于该用户ID的JSON文件。感谢您的帮助,我很感激。