使用本地json文件使用javascript查找key:value

时间:2017-08-30 16:15:40

标签: javascript json

我有here的州名缩写json文件。在我的.js文件中,我有var = state我想查找缩写。所以我需要帮助来找到如何做到这一点。例如,在json中查找状态(= Maine)以获得“ME”值。 请帮忙! 新手在javascript所以请在答案中尽可能基本。 感谢

更新 所以我的json很好。这是一个样本......

[{"Alabama": "AL","Alaska": "AK","American Samoa": "AS",.....})

在我的.js文件中,我'试图'获取json文件并将其用于查找,就像这样。显然这不起作用。我知道有很多错误,所以在帮忙时请保持愉快。记住我是新手。 ; - )

$.getJSON("/files/json/states_hash.json", function(json){
var data = eval("(" + json.responseText +")");
var val=_.findValue(json, stateNameVar);
console.log(json);
});

3 个答案:

答案 0 :(得分:2)

基于Matteo的评论,一个选项是运行一个简单的一次性脚本来反转键/值。这使得您尝试执行的查找相当简单:

// here's what you have now:
const states = { 'VA': 'Virginia', 'CO': 'Colorado' };
console.log(states);

// this flips the keys/values:
const flippedStates = {};
Object.entries(states).forEach(([k,v]) => { flippedStates[v] = k })
console.log(flippedStates);

// lookup by full name:
console.log(flippedStates['Virginia']);
console.log(flippedStates['Colorado']);

在需要的地方编织JSON.parse / stringify

答案 1 :(得分:0)

由于此例中的缩写是键,因此您需要使用适当的方法按其值查找键。这取决于您可以使用的内容。可以在此处找到几种这样做的方法:JavaScript object get key by value

现在,您还必须将JSON加载到页面中。同样,这取决于您的环境(node.js,浏览器等)。使用node.js它就像const states = require("./states.json");一样简单,但在浏览器中有几种不同的权衡方法,这里有更好的描述:Loading local JSON file

答案 2 :(得分:0)

如果我理解你的问题,你试图反转Json的键/值关系。您可以通过编程方式将其反转为可能更有效的事情:

var data = { /*your json */ }
var newData = Object.keys(data).reduce(function(obj,key){
  obj[ data[key] ] = key;
  return obj;
},{});

OR而不使用外部库(效率不高):

function getKeyByValue(data, state) {
  return Object.keys(data).find(key => data[key] === state);
}

或者您可以使用外部库。这取决于你。

来自您的代码:

我已经在Gist上添加了一个类似你正在使用的JSON 您可以在下面测试此代码...(抱歉,由于CORS政策,我必须将这个非常长的地址插入到Gist中)。

var json_file = "https://gist.githubusercontent.com/MatteoRagni/71280e5be2281347d915f90a60b7167b/raw/f3cf77fb2755461be96d03023226220583d6939d/state2_hash.json";
var state = "Maine";

$.getJSON(json_file, function(json) {
  console.log(json[state]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>