如何使用Javascript动态替换JSON对象键中的空格?

时间:2015-10-30 14:54:46

标签: javascript json

如何动态替换JSON对象的键中的空格?例如,如果我有以下对象:

[{
    "FIRST NAME": "Philip",
    "LAST NAME": "Rivers",
    "NUMBER": "17",
    "GPA": "1.0",
    "OLD_FACTOR": "8",
    "NICENESS": "1"
}, {
    "FIRST NAME": "Peyton",
    "LAST NAME": "Manning",
    "NUMBER": "18",
    "GPA": "4.0",
    "OLD_FACTOR": "5000",
    "NICENESS": "5000"
}]

我希望能够分别动态地将“FIRST NAME”和“LAST NAME”重命名为“FIRST_NAME”和“LAST_NAME”。根据目前为止的研究,我有这个功能:

function replaceSpaces(data) {
    debugger;
    for (var i = 0; i < data.length; i++) {
        var obj = data[i];
        for (var key in obj) {
            var replacedKey = key.split(' ').join('_');
            data[i][obj] = replacedKey;
        }
    }

    return data;
}

传入的“data”参数是在进入此函数之前已在其上运行JSON.parse的对象。

我对这段代码的问题是,它正好循环键,并将正确替换的字符串分配给“replacementKey”,但它没有将其分配给原始数据对象。

3 个答案:

答案 0 :(得分:4)

你需要:

  • 复制
  • 删除旧属性
  • 修改正确的对象。 (data[i][obj]会将obj转换为字符串,并尝试将其用作属性名称。)

这样:

    for (var original_property in obj) {
        var new_property = original_property.split(' ').join('_');
        obj[new_property] = obj[original_property];
        delete obj[original_property]
    }

答案 1 :(得分:3)

以下是使用forEach的完整代码。

这些步骤与Quentin

中列出的answer相同
  1. 复制值
  2. 从对象中删除键值
  3. 在对象
  4. 中添加具有新值的新项目

    &#13;
    &#13;
    var arr = [{
      "FIRST NAME": "Philip",
      "LAST NAME": "Rivers",
      "NUMBER": "17",
      "GPA": "1.0",
      "OLD_FACTOR": "8",
      "NICENESS": "1"
    }, {
      "FIRST NAME": "Peyton",
      "LAST NAME": "Manning",
      "NUMBER": "18",
      "GPA": "4.0",
      "OLD_FACTOR": "5000",
      "NICENESS": "5000"
    }];
    
    
    // Iterate over array
    arr.forEach(function(e, i) {
      // Iterate over the keys of object
      Object.keys(e).forEach(function(key) {
        
        // Copy the value
        var val = e[key],
          newKey = key.replace(/\s+/g, '_');
        
        // Remove key-value from object
        delete arr[i][key];
    
        // Add value with new key
        arr[i][newKey] = val;
      });
    });
    
    console.log(arr);
    document.getElementById('result').innerHTML = JSON.stringify(arr, 0, 4);
    &#13;
    <pre id="result"></pre>
    &#13;
    &#13;
    &#13;

    严格来说,如果JSON是从服务器以字符串形式获取的话

    用键替换_的空格。

    JSON.parse(jsonString.replace(/"([\w\s]+)":/g, function (m) {
        return m.replace(/\s+/g, '_');
    }));
    

答案 2 :(得分:0)

由于它是JSON,因此可以在Regex的帮助下以字符串形式出现。

var processedJson = yourJson.replace(/( +)(?=[(\w* *]*":)/g, "_");
var yourObj = JSON.parse(processedJson);

/( +)(?=[(\w* *]*":)/g会在中找到" ... ":的所有信息,这是每个JSON对象的关键字。