Приведите объект JSON в строку с именем свойства в верхнем регистре, используя stringify и replace [duplicate]

Я должен выполнить эту функцию, как я могу заменить имя свойства соответствующим именем в верхнем регистре.

function stringify(v){

  function replacer(k,v){
    // to be completed
  }

  return JSON.stringify(v,replacer)
}

console.log(stringify(JSON.parse(process.argv[2])))

Например, команда:

node json_upper_case.js '[{"город":"Милан","Качество воздуха":"красный","Температура":10},{"качество воздуха":"желтый","Температура":20,"Морские условия ":3,"Город":"Генова"}]'

ожидается, что он напечатает следующий вывод:

[{"ГОРОД":"Милан","КАЧЕСТВО ВОЗДУХА":"красный","ТЕМПЕРАТУРА":10},{"КАЧЕСТВО ВОЗДУХА":"желтый","ТЕМПЕРАТУРА":20,"УСЛОВИЯ МОРЯ":3," ГОРОД":"Генуя"}]


person n0t0r1us    schedule 16.03.2019    source источник
comment
Пожалуйста, покажите вашу попытку. Мы здесь, чтобы направить вас на правильный путь, а не помочь вам завершить работу.   -  person yqlim    schedule 16.03.2019
comment
Вы уже пробовали что-нибудь?   -  person Nafees Anwar    schedule 16.03.2019
comment
да, но я новичок в js, я понимаю, что изначально функция заменителя вызывается с пустой строкой в ​​качестве ключа, представляющего строковый объект. Затем он вызывается для каждого свойства строкового объекта или массива, но я смог изменить только имя значений свойств:   -  person n0t0r1us    schedule 16.03.2019


Ответы (2)


Простой Array.prototype.map() вместе с некоторым динамическим доступом к имени свойства выполняет эту работу:

let json = `[{
  "city": "Milano",
  "Air Quality": "red",
  "Temperature": 10
}, {
  "air quality": "yellow",
  "Temperature": 20,
  "Sea conditions": 3,
  "City": "Genova"
}]`

function keysToUppercase(j) {
  if (typeof j === 'string') { // so it works for javascript arrays as well
    try {
      j = JSON.parse(j);
    } catch (err) {
      console.error('Invalid JSON input');
      console.error(err);
    }
  }
  j = j.map(x => {
    for (let prop in x) {
      x[prop.toUpperCase()] = x[prop];
      delete x[prop];
    }
    return x;
  })
  return j;
}

console.log(keysToUppercase(json));

person connexo    schedule 16.03.2019

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter показывает почти правильный ответ, попробуйте изменить данную функцию в соответствии с вашими потребностями:

function replacer(key, value) {
  // Filtering out properties
  if (typeof value === 'string') {
    return undefined;
  }
  return value;
}
person Philipp Hemmelmayr    schedule 16.03.2019