使用 Underscorejs 从 json 中提取值
extracting values from json using Underscorejs
我有一个 json,我需要从中过滤 name
值与传递的输入匹配的对象,然后从相应的 links
中提取 href
值ref
值为 self
的对象。我附上了代码片段以及我的过滤方法。我正在使用 Underscore.js
.
var jsonObj = [
{
"links": [
{
"rel": "self",
"href": "http://hostname:port/state/644444",
"variables": [],
"variableNames": [],
"templated": false
},
{
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}
],
"stateId": 65986,
"countyId": 6184,
"name": "AAATest",
"population": 20000,
"location": "SFS CSR"
},
{
"links": [
{
"rel": "self",
"href": "http://hostname:port/state/65987",
"variables": [],
"variableNames": [],
"templated": false
},
{
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}
],
"stateId": 65987,
"countyId": 6184,
"name": "2k8std511",
"population": 20000,
"location": "SFS CSR"
}
]
var keywords='2k8std511';
var filtered = _.filter(jsonObj, function (item) {
return (_.contains('2k8std511', item['name']));
});
console.log(_.chain(jsonObj)
.pluck("links")
.flatten()
.value());
请告诉我如何根据给定的关键字进行过滤:
示例输入:AAATest
预期输出:[href:'http://hostname:port/state/644444']
此致,
普拉迪普
你可以用普通的 JavaScript:
var result = jsonObj.filter(function(obj) {
return obj.name === 'AAATest'
}).reduce(function(acc, obj) {
var links = obj.links.filter(function(link) {
return link.rel === 'self'
}).map(function(link) {
return link.href
})
return acc.concat(links)
},[])
console.log(result) //=> ["http://hostname:port/state/644444"]
下划线解决方案:
var jsonObj = [{
"links": [{
"rel": "self",
"href": "http://hostname:port/state/644444",
"variables": [],
"variableNames": [],
"templated": false
}, {
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}],
"stateId": 65986,
"countyId": 6184,
"name": "AAATest",
"population": 20000,
"location": "SFS CSR"
}, {
"links": [{
"rel": "self",
"href": "http://hostname:port/state/65987",
"variables": [],
"variableNames": [],
"templated": false
}, {
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}],
"stateId": 65987,
"countyId": 6184,
"name": "2k8std511",
"population": 20000,
"location": "SFS CSR"
}]
var filtername = 'AAATest';
var answer = _.chain(jsonObj)
.filter(function(obj) {
return obj.name === filtername;
})
.map(function(obj) {
return obj.links
})
.first()
.filter(function(obj) {
return obj.rel === 'self'
})
.map(function(obj) {
return obj.href
})
.value();
console.log(answer);
<script src="http://underscorejs.org/underscore-min.js"></script>
另一个使用下划线的版本:
var result = _.chain(jsonObj)
.where({ name: 'AAATest' })
.pluck('links')
.flatten()
.where({ rel: 'self'})
.pluck('href')
.value();
我有一个 json,我需要从中过滤 name
值与传递的输入匹配的对象,然后从相应的 links
中提取 href
值ref
值为 self
的对象。我附上了代码片段以及我的过滤方法。我正在使用 Underscore.js
.
var jsonObj = [
{
"links": [
{
"rel": "self",
"href": "http://hostname:port/state/644444",
"variables": [],
"variableNames": [],
"templated": false
},
{
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}
],
"stateId": 65986,
"countyId": 6184,
"name": "AAATest",
"population": 20000,
"location": "SFS CSR"
},
{
"links": [
{
"rel": "self",
"href": "http://hostname:port/state/65987",
"variables": [],
"variableNames": [],
"templated": false
},
{
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}
],
"stateId": 65987,
"countyId": 6184,
"name": "2k8std511",
"population": 20000,
"location": "SFS CSR"
}
]
var keywords='2k8std511';
var filtered = _.filter(jsonObj, function (item) {
return (_.contains('2k8std511', item['name']));
});
console.log(_.chain(jsonObj)
.pluck("links")
.flatten()
.value());
请告诉我如何根据给定的关键字进行过滤:
示例输入:AAATest
预期输出:[href:'http://hostname:port/state/644444']
此致, 普拉迪普
你可以用普通的 JavaScript:
var result = jsonObj.filter(function(obj) {
return obj.name === 'AAATest'
}).reduce(function(acc, obj) {
var links = obj.links.filter(function(link) {
return link.rel === 'self'
}).map(function(link) {
return link.href
})
return acc.concat(links)
},[])
console.log(result) //=> ["http://hostname:port/state/644444"]
下划线解决方案:
var jsonObj = [{
"links": [{
"rel": "self",
"href": "http://hostname:port/state/644444",
"variables": [],
"variableNames": [],
"templated": false
}, {
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}],
"stateId": 65986,
"countyId": 6184,
"name": "AAATest",
"population": 20000,
"location": "SFS CSR"
}, {
"links": [{
"rel": "self",
"href": "http://hostname:port/state/65987",
"variables": [],
"variableNames": [],
"templated": false
}, {
"rel": "city",
"href": "http://hostname:port/city/6184",
"variables": [],
"variableNames": [],
"templated": false
}],
"stateId": 65987,
"countyId": 6184,
"name": "2k8std511",
"population": 20000,
"location": "SFS CSR"
}]
var filtername = 'AAATest';
var answer = _.chain(jsonObj)
.filter(function(obj) {
return obj.name === filtername;
})
.map(function(obj) {
return obj.links
})
.first()
.filter(function(obj) {
return obj.rel === 'self'
})
.map(function(obj) {
return obj.href
})
.value();
console.log(answer);
<script src="http://underscorejs.org/underscore-min.js"></script>
另一个使用下划线的版本:
var result = _.chain(jsonObj)
.where({ name: 'AAATest' })
.pluck('links')
.flatten()
.where({ rel: 'self'})
.pluck('href')
.value();