Javascript 如何在json中找到值
如何在下面的json数据中使用邮政编码来细化状态名称Javascript 如何在json中找到值,javascript,json,Javascript,Json,如何在下面的json数据中使用邮政编码来细化状态名称 var data = '{ "1": { "state": "VIC", "postcode": "2600,2603,2605,2606" }, "2": { "state": "NSW", "postcode": "2259,2264" } }' 如何通过postcode查找状态 如果我搜索邮政编码2600如果得到像VIC这样的结果,那么现在。。你只是要求我们帮你做作业:)幸好我心情很好
var data = '{
"1": {
"state": "VIC",
"postcode": "2600,2603,2605,2606"
},
"2": {
"state": "NSW",
"postcode": "2259,2264"
}
}'
如何通过postcode
查找状态
如果我搜索邮政编码
2600
如果得到像VIC
这样的结果,那么现在。。你只是要求我们帮你做作业:)幸好我心情很好
首先获取一个正确的JSON字符串,并使用JSON.parse
将其解析为一个对象。然后迭代这个对象,拆分邮政编码字符串并找到状态
var data = ......
var resp = JSON.parse(data);
function getStateByPostcode(postcode) {
var state = "";
for(var i in resp) {
if(resp.hasOwnProperty(i)) {
var postcodes = resp[i]['postcode'].split(',');
if(postcodes.indexOf(postcode) !== -1) {
return resp[i]['state'];
}
}
}
return state;
}
函数查找状态(数据、邮政编码){
var postcode=postcode.toString()
for(数据中的var k){
var postcodes=data[k]。邮政编码。拆分(“,”)
if(邮政编码索引)(邮政编码)!=-1)
返回数据[k]。状态
}
}
//演示输出
var数据={“1”:{“州”:“维克”,“邮政编码”:“2600260326052606”},“2”:{“州”:“新南威尔士州”,“邮政编码”:“22592264”}”
var dataObj=JSON.parse(数据)
var状态=findState(dataObj,2600)
document.write(state)
删除'
,因为您的字符串无效,请删除'
,使其成为有效的对象文字,然后您可以迭代对象的键,检查其是否具有匹配的邮政编码,然后返回相应的状态
var数据={
"1": {
“国家”:“维克”,
“邮政编码”:“2600260326052606”
},
"2": {
“州”:“新南威尔士州”,
“邮政编码”:“22592264”
}
};
函数getState(数据、邮政编码){
用于(数据中的var x){
if(data[x].postcode&&data[x].postcode.split(“,”).indexOf(postcode.toString())!=-1)返回数据[x].state;
}
返回“未找到”;
}
警报(getState(数据,“2600”);
警报(getState(数据,2264))代码>您可以尝试以下方法:
函数searchInObject(对象、searchKey、searchValue){
for(对象中的变量i){
if(object[i][searchKey].indexOf(searchValue)>-1){
返回对象[i];
}
}
}
(功能(){
风险值数据={
"1": {
“国家”:“维克”,
“邮政编码”:“2600260326052606”
},
"2": {
“州”:“新南威尔士州”,
“邮政编码”:“22592264”
}
}
var pin=“2600”;
var结果=searchInObject(数据,“邮政编码”,pin);
console.log(result.state);
pin=“2259”;
结果=searchInObject(数据,“邮政编码”,pin);
console.log(result.state);
})()
像这样试试
var data = '{"1": { "state": "VIC","postcode": "2600,2603,2605,2606"}, "2": {"state": "NSW","postcode": "2259,2264"}}';
var jsObj = JSON.parse(data);
var find = "2600";
var values = Object.keys(jsObj).filter(function(x) {
return jsObj[x].postcode.indexOf(find) > -1;
}).map(function(x) {
return jsObj[x].state;
});
console.log(values.length > 0 ? values[0] : "not found");
首先,您需要对JSON.parse(数据)进行解析(虽然,这不会按原样工作,因为您发布的内容不是有效的javascript)-然后,如果我搜索postcode
,您将处理的只是一个常规对象-您如何“搜索”。。。在某些函数和函数返回状态名称中显示一些传递代码的邮政编码值无论您如何处理这些数据,都将是错误的。。。2600->2639范围内的邮政编码不是VICI,我从Javascript标记中假设您想要在Javascript中解析它,但是如果您只需要从包含JSON数据的文件中提取值,最好的选择是jq
:如果您从数据中删除'
,它就不再是JSON,它是一个物体literal@RGraham它不是JSON,而是语法Error@RGraham这是操作码中的语法错误。@CodeiSir Correct。OP拥有的是一个JSON字符串,尽管构造不正确,但这也不是JSON。不是说这是错误的,只是错误的术语。“CordIIR先生,你的我有效的JSON字符串:”既不是你的,“CODEISIR -考虑真实世界的10个成千上万的邮政编码的数据……所有张贴的答案都不会表现得很好well@JaromandaX你如何让“我的”更快?(这与公认的答案几乎相同,从.toString()
中可以看出,它经常被称为way to:PI不能让你或其他人的速度更快-我会用另一种方式写它-你提到了性能,我只是指出,在所有答案中,这个简单的例子的性能可以忽略不计