Javascript 如何将字典中的嵌套值更改为上级键
我有一个特定格式的json文件,但我想将其更改为需要提取其中一个嵌套值并将其作为上层键投影的格式 我只尝试了stackoverflow的建议,试图达到特定的嵌套值,但无法将其提升Javascript 如何将字典中的嵌套值更改为上级键,javascript,json,dictionary,Javascript,Json,Dictionary,我有一个特定格式的json文件,但我想将其更改为需要提取其中一个嵌套值并将其作为上层键投影的格式 我只尝试了stackoverflow的建议,试图达到特定的嵌套值,但无法将其提升 data = open('sampleDemo.json','r') json_decode=json.load(data) for item in data: mydict={} mydict['spk1'] = item.get('audioResponse').get('startTime').g
data = open('sampleDemo.json','r')
json_decode=json.load(data)
for item in data:
mydict={}
mydict['spk1'] = item.get('audioResponse').get('startTime').get('emotion').get.....
print mydict
期望输出:
输入文件如下所示:
{
"audioResponse": [
{
"speaker":"spk1",
"startTime": "0.0",
"endTime": "15.239",
"emotion": "neutral",
"emotionScore": "0"
},
{
"speaker":"silence",
"startTime": "15.240",
"endTime": "16.900",
"emotion": "NA",
"emotionScore": "NA"
},
{
"speaker":"spk2",
"startTime": "16.932",
"endTime": "27.320",
"emotion": "happy",
"emotionScore": "2"
},
{
"speaker":"spk1",
"startTime": "27.977",
"endTime": "37.900",
"emotion": "anger",
"emotionScore": "-3"
}
]}
var数据={
“音频响应”:[{
“发言人”:“spk1”,
“开始时间”:“0.0”,
“结束时间”:“15.239”,
“情感”:“中性”,
“情感分数”:“0”
}, {
“发言者”:“沉默”,
“开始时间”:“15.240”,
“结束时间”:“16.900”,
“情感”:“那”,
“情绪分数”:“不适用”
}, {
“发言人”:“spk2”,
“开始时间”:“16.932”,
“结束时间”:“27.320”,
“情感”:“快乐”,
“情绪分数”:“2”
}, {
“发言人”:“spk1”,
“开始时间”:“27.977”,
“结束时间”:“37.900”,
“情绪”:“愤怒”,
“情绪分数”:“-3”
}]
};
var结果={
音频响应:[]
};
用于(数据的var项。音频响应){
var existed=result.audioResponse.find(x=>x[item.speaker]);
如果(!存在)
result.audioResponse.push({
[项目.发言者]:[]
});
existedArray=result.audioResponse.find(x=>x[item.speaker])[item.speaker];
var copy={…item};
删除copy.speaker;
existedArray.push(复制);
}
控制台日志(结果)代码>
你可以使用这个方法。希望它能帮助你
但我想将其更改为需要拾取其中一个嵌套值并将其作为上层键投影的格式
可以将编组的属性设置为动态
'use strict';
let attribute = 'speaker'; // can be 'speaker' or 'emotion' or 'emotionScore'
let output = {
audioResponse: []
};
for (let response of data.audioResponse) {
let groupKey = response[attribute];
let group = output.audioResponse[groupKey];
delete response[attribute]; //remove the key
if (group) {
group.push(response);
} else {
group = [response];
}
output.audioResponse[groupKey] = group;
}
console.log(output);
'use strict';
let attribute = 'speaker'; // can be 'speaker' or 'emotion' or 'emotionScore'
let output = {
audioResponse: []
};
for (let response of data.audioResponse) {
let groupKey = response[attribute];
let group = output.audioResponse[groupKey];
delete response[attribute]; //remove the key
if (group) {
group.push(response);
} else {
group = [response];
}
output.audioResponse[groupKey] = group;
}
console.log(output);