Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我有一个带有数据属性的JSON文件,其中包含包含冠军信息的对象。如何使用特定的密钥属性获得冠军?_Javascript_Json_Object - Fatal编程技术网

Javascript 我有一个带有数据属性的JSON文件,其中包含包含冠军信息的对象。如何使用特定的密钥属性获得冠军?

Javascript 我有一个带有数据属性的JSON文件,其中包含包含冠军信息的对象。如何使用特定的密钥属性获得冠军?,javascript,json,object,Javascript,Json,Object,我有一个巨大的静态JSON文件,其中包含某个游戏中的所有冠军以及他们的一些信息。目前,我需要弄清楚如何找到“key”属性为266的champion对象。可悲的是,我很难弄清楚如何得到那个物体。我假设我必须遍历对象,但是,通常当我遍历某个对象时,它是一个数组,但事实并非如此 我在下面给出了一个json结构的简化示例。我有一个整数266,现在我需要以某种方式访问带有“key”的对象:“266”应该是Aatrox。我该怎么做有什么线索吗 "data": { "Aatrox": {

我有一个巨大的静态JSON文件,其中包含某个游戏中的所有冠军以及他们的一些信息。目前,我需要弄清楚如何找到“key”属性为266的champion对象。可悲的是,我很难弄清楚如何得到那个物体。我假设我必须遍历对象,但是,通常当我遍历某个对象时,它是一个数组,但事实并非如此

我在下面给出了一个json结构的简化示例。我有一个整数266,现在我需要以某种方式访问带有“key”的对象:“266”应该是Aatrox。我该怎么做有什么线索吗

"data": {
    "Aatrox": {
        "version": "8.19.1",
        "id": "Aatrox",
        "key": "266",
        "name": "Aatrox",
        "title": "the Darkin Blade"
    },
    "Ahri": {
        "version": "8.19.1",
        "id": "Ahri",
        "key": "103",
        "name": "Ahri",
        "title": "the Nine-Tailed Fox"
    }
}
你可以用find

  • 使用
    对象从数据键获取条目。条目
  • 使用
    Find
let obj={“data”:{“Aatrox”:{“version”:“8.19.1”,“id”:“Aatrox”,“key”:“266”,“name”:“Aatrox”,“title”:“Darkin刀片”},“Ahri”:{“version”:“8.19.1”,“id”:“Ahri”,“key”:“103”,“name”:“Ahri”,“title”:“九尾狐”}}
让findByKey=(matchKey)=>Object.entries(obj.data).find(([key,value])=>value.key==matchKey)

console.log(findByKey('266'))
这里有一个通用函数,可用于搜索任何键和值:

const obj={“data”:{“Aatrox”:{“version”:“8.19.1”,“id”:“Aatrox”,“key”:“266”,“name”:“Aatrox”,“title”:“the Darkin Blade”},“Ahri”:{“version”:“8.19.1”,“id”:“Ahri”,“key”:“103”,“name”:“Ahri”,“title”:“the九尾狐”}}
const searchKeyValue={key:“key”,value:“266”}
const search=data=>skv=>Object.entries(data).filter(([key,value])=>value[skv.key]==skv.value)

log(search(obj.data)(searchKeyValue))
您也可以使用JSONPath,即

$..data[?(@.key==266)]
假设:

{"data": {
    "Aatrox": {
        "version": "8.19.1",
        "id": "Aatrox",
        "key": "266",
        "name": "Aatrox",
        "title": "the Darkin Blade"
    },
    "Ahri": {
        "version": "8.19.1",
        "id": "Ahri",
        "key": "103",
        "name": "Ahri",
        "title": "the Nine-Tailed Fox"
    }
}
}

性能重要吗?我只是为了学习而做这个项目,所以这不是一个真正的项目,但如果我想学习一些东西,最好是正确地做,对吗?对于大多数事情来说,拥有一个大的JSON文件可能是一个糟糕的开始;)但当这是您想要或必须使用的工具时,有一些工具可以对性能产生重大影响。例如,您可以使用流式JSON解析器,而不是读取整个文件,解析所有内容,然后在数据上循环。例如