将JSON转换为并行数组Javascript对象
我有一个独特的要求要解决。以下是来自虚拟数据集的elasticsearch响应,如您在结果中所见,意外和意外(日期)列,painted&preowned对于有实际值的行返回,而当列值为null时,字段本身不会出现在响应中,这是因为elasticsearch不会索引null列 无法索引或搜索空值。当字段设置为 null(或空数组或空值数组),它被视为 尽管该字段没有值 我想将此信息解析为一个Javascript对象,其中数据以并行数组的形式出现,其中每个数组表示一列,数组的索引表示给定行的值。 下面是我的代码,我使用Lodesh首先映射它,然后执行交互以获得结果将JSON转换为并行数组Javascript对象,javascript,Javascript,我有一个独特的要求要解决。以下是来自虚拟数据集的elasticsearch响应,如您在结果中所见,意外和意外(日期)列,painted&preowned对于有实际值的行返回,而当列值为null时,字段本身不会出现在响应中,这是因为elasticsearch不会索引null列 无法索引或搜索空值。当字段设置为 null(或空数组或空值数组),它被视为 尽管该字段没有值 我想将此信息解析为一个Javascript对象,其中数据以并行数组的形式出现,其中每个数组表示一列,数组的索引表示给定行的值。 下
var rawData= _.map(data.result.[0].hits, h => h.row)
var primaryKeys=Object.keys(rawData[0].primaryKey);
var columns=Object.keys(rawData[0].columns);
var parsedData={}
for (var pkey of primaryKeys) { parsedData[pkey]=[] }
for (var column of columns) { parsedData[column]=[] }
for (var row of rawData) {
for (var pkey of primaryKeys) {
parsedData[pkey].push(row.primaryKey[pkey])
}
for (var column of columns) {
parsedData[column].push(row.columns[column])
}
}
console.log(parsedData);
这就是结果
{
"car_registration_no": [
"61123",
"61124",
"61125"
],
"model": [
"Nissan",
"Nissan",
"Nissan"
],
"submodel": [
"Saloon",
"Saloon",
"Saloon"
],
"date_used": [
1597017600000,
1597017600000,
1597017600000
]
}
在我的结果中,我丢失了列意外和意外(日期,绘制&预拥有,因为并非所有行/主键都有这些列,我无法判断哪一行将有哪一列的值,因此,当一行没有其他行中的列时,如何迭代primaryKey的每一行并映射所有列,以便在该行的索引中为其生成空值
预期结果如下:
{
"car_registration_no": [
"61123",
"61124",
"61125"
],
"model": [
"Nissan",
"Nissan",
"Nissan"
],
"submodel": [
"Saloon",
"Saloon",
"Saloon"
],
"painted": [
"Yes",
"null", --> note this
"null"
],
"accidents": [
"null", --> note this
"1",
"null"
],
"accidents_date": [
"null",
"12/12/2019", --> note this
"null"
],
"preowned": [
"null",
"null", --> note this
"Yes"
],
"date_used": [
1597017600000,
1597017600000,
1597017600000
]
}
我对你在这里的申请一无所知。但是,最终,如果您的目标是提取数组对象,我认为我的答案可能有用 注意:这里我使用了您上面提到的字符串'null'。但是在进一步的计算中,使用null而不是null可能会有用
var数据={
结果:[
{
总点击数:3,
点击次数:[
{
方案:“adef89sesdceasjkmn5dlky6djj7kk189lkdqsc”,
基本版本:24,
行:{
primaryKey:{
车辆登记号码:“61123”
},
栏目:{
型号:“日产”,
子模型:“轿车”,
画:“是的”,
使用日期:1597017600000
},
编辑版本:0
},
突出显示:{}
},
{
方案:“adef89sesdceasjkmn5dlky6djj7kk189lkdqsc”,
基本版本:24,
行:{
primaryKey:{
车辆登记号码:“61124”
},
栏目:{
型号:“日产”,
子模型:“轿车”,
事故:“1”,
事故发生日期:2019年12月12日,
使用日期:1597017600000
},
编辑版本:0
},
突出显示:{}
},
{
方案:“adef89sesdceasjkmn5dlky6djj7kk189lkdqsc”,
基本版本:24,
行:{
primaryKey:{
车辆登记号码:“61125”
},
栏目:{
型号:“日产”,
子模型:“轿车”,
“是的”,
使用日期:1597017600000
},
编辑版本:0
},
突出显示:{}
}
],
聚合:{},
nextPageToken:空
}
]
};
常量空数据={
车辆登记号:[],
型号:[],
子模型:[],
涂漆:[],
事故:[],
事故发生日期:【】,
优先拥有:[],
使用日期:[]
};
const emptyCheck=val=>val?val:'空';
const parsedData=data.result[0]。hits.reduce((pre,curr)=>{
常量{primaryKey,columns}=curr.row;
预登记车号按钮(主钥匙车号);
pre.model.push(清空检查(columns.model));
pre.submodel.push(清空检查(columns.submodel));
预涂。推(清空检查(柱。涂));
预防事故。推送(清空检查(列。事故));
事故前日期推送(清空检查(列.事故日期));
pre.preowned.push(清空检查(columns.preowned));
pre.date_used.push(清空检查(columns.date_used));
返回预处理;
},空数据);
console.log(parsedData)代码>不幸的是,我的应用程序只能使用并行数组在表中显示数据。这非常有效。谢谢,现在我必须为所有可能出现的列创建一个列表,以确保没有遗漏任何列:)
{
"car_registration_no": [
"61123",
"61124",
"61125"
],
"model": [
"Nissan",
"Nissan",
"Nissan"
],
"submodel": [
"Saloon",
"Saloon",
"Saloon"
],
"painted": [
"Yes",
"null", --> note this
"null"
],
"accidents": [
"null", --> note this
"1",
"null"
],
"accidents_date": [
"null",
"12/12/2019", --> note this
"null"
],
"preowned": [
"null",
"null", --> note this
"Yes"
],
"date_used": [
1597017600000,
1597017600000,
1597017600000
]
}