#javascript #node.js #json
#javascript #node.js #json
Вопрос:
У меня есть JSON, как показано ниже, в котором каждый элемент имеет поле _value
"batchControlInfo" : {
"sender" : {
"_value" : "MMRPT"
},
"recipient" : {
"_value" : "AAZTE"
},
"fileSequenceNumber" : {
"_value" : 30
},
"fileCreationTimeStamp" : {
"localTimeStamp" : {
"_value" : 20200904052019
},
"utcTimeOffset" : {
"_value" : " 0630"
}
}
}
Как преобразовать его в, как показано ниже, просто чтобы удалить _value, который является общим для каждого элемента узла.
"batchControlInfo" : {
"sender" : "MMRPT",
"recipient""AAZTE",
"fileSequenceNumber" : 30,
"fileCreationTimeStamp" : {
"localTimeStamp" : 20200904052019,
"utcTimeOffset" : " 0630"
}
}
Ответ №1:
Это можно сделать рекурсивно следующим образом.
const input = {
"batchControlInfo" : {
"sender" : {
"_value" : "MMRPT"
},
"recipient" : {
"_value" : "AAZTE"
},
"fileSequenceNumber" : {
"_value" : 30
},
"fileCreationTimeStamp" : {
"localTimeStamp" : {
"_value" : 20200904052019
},
"utcTimeOffset" : {
"_value" : " 0630"
}
}
}
};
function getResult(input) {
const output = {};
for (const key in input) {
if (input[key] amp;amp; typeof input[key] === "object") {
if ("_value" in input[key]) {
output[key] = input[key]["_value"];
} else {
output[key] = getResult(input[key]);
}
}
}
return output;
}
console.log(getResult(input));
Комментарии:
1. Это приведет к сбою, если есть объекты со значениями другого типа,
object
которые не названы_value
. Как бы то ни было, это работает для случая OP. Возможно, вы захотите исправить это для будущих читателей. Добавлениеelse { output[key] = input[key]; }
к вашему первомуif
исправит это.