如何使用下划线或lodash从JSON字符串中获取嵌套对象 [英] How to get nested objects from JSON string using underscore or lodash
问题描述
我刚刚介绍了underscore.js / lodash,并发现它是一个操作JSON对象的强大工具。但是我的理解目前有限,需要对这个JSON对象提供一些帮助。
这是我的JSON对象
{
driver:[
{
id:1,
name:Bob,
年龄:34,
汽车:[
{
make:BMW,
型号:3.20,
颜色:银,
里程:[
{
总计:350523,
年:[
{
2011:3535,
2012:7852,
2013:8045
}
],
月:[
{
12月:966,
11月:546,
10月:7657
}
]
}
]
}
]
},
{
id:2,
name:Rob,
年龄:22,
汽车:[
{
make:Peugeot,
model:306,
颜色:蓝色,
里程:[
{
总计:125635,
年:[
{
2011:3276,
2012:2445,
2013:4566
}
],
月:[
{
12月:966,
11月:546,
10月:157
}
]
}
]
}
]
},
{
id:3,
name:June,
age:19,
car: [
{
make:Mazda,
model:3,
color:Red,
里程: [
{
total:550523,
year:[
{
2011:8456,
2012:9552,
2013:10633
}
],
月:[
{
12月:625,
11月:2656,
10月:1332
}
]
}
]
}
]
}
]
}
我想为特定的司机提取汽车。我可以根据此代码获取驱动器
var selectDriver = _.filter(data.driver,{id: 3 });
但是为了获得这个驱动程序的汽车问题,我得到了未定义的属性。我错过了什么,或者我的以下代码做错了
var driverCar = _.chain(selectDriver)
.flatten(selectDriver)
.pluck(selectDriver, car)
.map( function (car){
return {
make:make,
model:car.model,
color:car.colour
}
})
.value( );
感谢您的帮助!
尝试
var search = _.filter(_。keys(data),function(key){
var obj = data [key];
return _.every(查询, function(val,queryKey){
return ref (obj,queryKey)=== val ;
});
});
这是一种方法。我用普通的JS完成了大部分工作。仅使用下划线的展平方法。
函数getCarFor(driverId){
var cars = data.driver.filter(function(driverObject){
return driverObject.id === driverId;
} )
.map(函数(驱动程序){
return driver.car.map(function(car){
返回 {
make:driver.car [ 0 ]。make,
model:driver。 car [ 0 ]。型号,
颜色:driver.car [ 0 ]。color
};
});
});
return _.flatten(cars)[ 0 ]; // 假设您想要第一辆车
}
< span class =code-keyword> var car1 = getCarFor( 1 )
console.log(car1);
I have just got introduced to underscore.js/lodash and finding it a power tool to manipulating JSON objects. However my understanding is limited at the moment and need to some help with this JSON object.
This is my JSON object
{ "driver": [ { "id": 1, "name": "Bob", "age": "34", "car": [ { "make": "BMW", "model": "3.20", "colour": "Silver", "mileage": [ { "total": "350523", "year": [ { "2011": "3535", "2012": "7852", "2013": "8045" } ], "month": [ { "december": "966", "november": "546", "october": "7657" } ] } ] } ] }, { "id": 2, "name": "Rob", "age": "22", "car": [ { "make": "Peugeot", "model": "306", "colour": "Blue", "mileage": [ { "total": "125635", "year": [ { "2011": "3276", "2012": "2445", "2013": "4566" } ], "month": [ { "december": "966", "november": "546", "october": "157" } ] } ] } ] }, { "id": 3, "name": "June", "age": "19", "car": [ { "make": "Mazda", "model": "3", "colour": "Red", "mileage": [ { "total": "550523", "year": [ { "2011": "8456", "2012": "9552", "2013": "10633" } ], "month": [ { "december": "625", "november": "2656", "october": "1332" } ] } ] } ] } ] }
I want to extract a car for a particular driver. I can get the drive based on this code
var selectDriver = _.filter(data.driver, {id: 3});
But having issues with getting the car for this driver, I get undefined properties. What am I missing, or doing wrong with my following code
var driverCar = _.chain(selectDriver)
.flatten(selectDriver)
.pluck(selectDriver, "car")
.map(function(car){
return {
make : make,
model: car.model,
colour : car.colour
}
})
.value();
Thanks for the help!
Try
var search = _.filter(_.keys(data), function (key) { var obj = data[key]; return _.every(query, function (val, queryKey) { return ref(obj, queryKey) === val; }); });
Here's one way to do it. I got it most of the way with plain JS. Only used underscore's flatten method.
function getCarFor(driverId) { var cars = data.driver.filter(function(driverObject) { return driverObject.id === driverId; }) .map(function(driver){ return driver.car.map(function(car){ return { make: driver.car[0].make, model: driver.car[0].model, colour: driver.car[0].colour }; }); }); return _.flatten(cars)[0]; // assuming you want the first car } var car1 = getCarFor(1) console.log(car1);
这篇关于如何使用下划线或lodash从JSON字符串中获取嵌套对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!