как форматировать JSON, присваивая значения элементу узла в javascript / nodejs

#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 исправит это.