【问题标题】:Stringify a JSON object with the property name in uppercase using stringify and replace [duplicate]使用字符串化和替换 [重复] 使用大写的属性名称对 JSON 对象进行字符串化
【发布时间】:2019-03-16 19:54:30
【问题描述】:

我必须完成这个功能,如何将属性名称替换为相应的大写名称。

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 '[{"city":"Milano","Air Quality":"red","Temperature":10},{"air quality":"yellow","Temperature":20, "海况":3,"城市":"热那亚"}]'

预计会打印以下输出:

[{"CITY":"Milano","AIR QUALITY":"red","TEMPERATURE":10},{"AIR QUALITY":"yellow","TEMPERATURE":20,"SEA CONDITIONS": 3,"CITY":"热那亚"}]

【问题讨论】:

  • 请展示您的尝试。我们来这里是为了引导您走上正确的道路,而不是帮助您完成工作。
  • 你试过了吗?
  • 是的,但我在 js 上比较新,我知道最初,replacer 函数是用一个空字符串作为表示被字符串化对象的键调用的。然后为正在字符串化的对象或数组上的每个属性调用它,但我只能更改属性值的名称:

标签: javascript json function replace stringify


【解决方案1】:

一个简单的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));

【讨论】:

    【解决方案2】:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 2020-07-04
      • 2016-04-14
      • 2015-09-21
      • 1970-01-01
      • 2018-07-20
      • 2020-05-28
      相关资源
      最近更新 更多