Необходимо преобразовать формат JSON в другой формат JSON, используя JavaScript - PullRequest
1 голос
/ 30 марта 2019

Необходимо преобразовать формат запроса ниже, используя javascript в выходной формат.

Запрос:

{
  "patientId": "1234",
  "patientName": "Sai",
  "patientFname": "Kumar",
  "patientLname": "Gadi",
  "city": "",
  "zipcode":null,
  "state":" "

}

Необходимо преобразовать, как показано ниже в формате, но нам нужно проверить значение ключа объекта элемента не должно быть нулевым или "" (без пробела) или "" (не пустым), тогда только нам нужно напечатать имя объекта и его значения как ниже формат:

Выход:

[
 {
  "propertyName": "patientId",
  "propertyValue": "1234"
 },
 {
   "propertyName": "patientName",
   "propertyValue": "Sai"
 },
 {
  "propertyName": "patientFname",
  "propertyValue": "Kumar"
  },
  {
   "propertyName": "patientLname",
    "propertyValue": "Gadi"
   }
]

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 30 марта 2019

Используйте map и filter на Object.entries:

const data = {
  "patientId": "1234",
  "patientName": "Sai",
  "patientFname": "Kumar",
  "patientLname": "Gadi",
  "city": "",
  "zipcode": null,
  "state": " "
};

const newData = Object.entries(data).filter(([, v]) => ![undefined, null, ""].includes(typeof v == "string" ? v.trim() : v)).map(([key, value]) => ({
  propertyName: key, 
  propertyValue: value
}));

console.log(newData);
.as-console-wrapper { max-height: 100% !important; top: auto; }
0 голосов
/ 30 марта 2019

Array.reduce будет здесь уместно.Таким образом, вам не нужно последовательно вызывать Array функции, просто чтобы циклически проходить по вашему массиву несколько раз (то есть: Array.map() + Array.filter()).

let obj = {
  "patientId": "1234",
  "patientName": "Sai",
  "patientFname": "Kumar",
  "patientLname": "Gadi",
  "city": "",
  "zipcode": null,
  "state": " "
};

let res = Object.entries(obj).reduce((acc, [key, value]) => {
  if (![undefined, null, ''].includes(typeof value === 'string' ? value.trim() : '')) {
    acc.push({
      propertyName: key,
      propertyValue: value
    });
  }
  return acc;
}, []);

console.log(res);
0 голосов
/ 30 марта 2019

Вы можете использовать Object.entries и reduce

let obj = {
  "patientId": "1234",
  "patientName": "Sai",
  "patientFname": "Kumar",
  "patientLname": "Gadi",
  "city": "",
  "zipcode":null,
  "state":" "
}

let op = Object.entries(obj).reduce((op,[key,value])=>{
  if((value||'').trim()){
    op.push({
    'propertyName' : key,
    'propertyValue': value
   })
  }
  return op
},[])

console.log(op)
0 голосов
/ 30 марта 2019

Вот один простой способ сделать это:

const obj = {
  "patientId": "1234",
  "patientName": "Sai",
  "patientFname": "Kumar",
  "patientLname": "Gadi",
  "city": "",
  "zipcode":null,
  "state":" "
};
const newArr = [];

for (let key in obj) {
  if (obj[key] && obj[key].trim()) {
    newArr.push({
      propertyName: key,
      propertyValue: obj[key]
    });
  }
}

console.log(newArr);

Сначала вы перебираете перечисляемые свойства объекта.На каждой итерации вы проверяете, не является ли значение пустым или пустым.Если есть правильное значение, он будет помещать новый объект в результирующий массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...