Как удалить пробелы между клавишами и значениями объекта

Я хочу удалить все пробелы между ключами или имена объектов перед тем, как их декодировать, используя метод json_decode .

Как и Income cut я могу сделать его Income_cut .

Есть ли способ обойти это.

 { "Housing": 0, "Late Comers": 0, "Income cut": "12500", "Study Allowance": 0, "test": 0, "i": 0, "staff_no": "9", "staff_name": "Abeja Vicky", "staff_department": "Production Staff", "staff_position": "Production Manager", "staff_salary": "0", "GrossValue": 12500, "GrossSalary": 0, "NSSF": 0, "PAYE": 0, "GrossValueAddiotion": 0, "GrossValueDecuction": 12500, "netPay": -12500, "Balance": 0, "Paidx": 0, "balance": -12500 } 

Предполагая, что не вложенный простой json-объект, ниже будет работать до отправки на сервер

 var input ={ "Housing": 0, "Late Comers": 0, "Income cut": "12500", "Study Allowance": 0, "test": 0, "i": 0, "staff_no": "9", "staff_name": "Abeja Vicky", "staff_department": "Production Staff", "staff_position": "Production Manager", "staff_salary": "0", "GrossValue": 12500, "GrossSalary": 0, "NSSF": 0, "PAYE": 0, "GrossValueAddiotion": 0, "GrossValueDecuction": 12500, "netPay": -12500, "Balance": 0, "Paidx": 0, "balance": -12500 } var output = {}; for(var key in input){ output[key.replace(/\s+/,'_')] = input[key]; } console.log(output); 

вы можете сделать это следующим образом: Рабочий пример

 var f={ "Housing": 0, "Late Comers": 0, "Income cut": "12500", "Study Allowance": 0, "test": 0, "i": 0, "staff_no": "9", "staff_name": "Abeja Vicky", "staff_department": "Production Staff", "staff_position": "Production Manager", "staff_salary": "0", "GrossValue": 12500, "GrossSalary": 0, "NSSF": 0, "PAYE": 0, "GrossValueAddiotion": 0, "GrossValueDecuction": 12500, "netPay": -12500, "Balance": 0, "Paidx": 0, "balance": -12500 }; function removeWhiteSpace(obj) { if (typeof obj !== "object") return obj; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { obj[prop.replace(" ", "_")] = removeWhiteSpace(obj[prop]); if (prop.indexOf(" ") > -1) { delete obj[prop]; } } } return obj; } var ob=removeWhiteSpace(f); 

Вы можете прокручивать атрибуты объекта и заменять любое пространство символом подчеркивания _ :

 var object_without_spaces ={}; for(var key in o) { var value = String(o[key]).replace(/ /g,"_"); var key = String(key).replace(/ /g,"_"); object_without_spaces[key]=value; } console.log(object_without_spaces); //Object {Housing: "0", Late_Comers: "0", Income_cut: "12500", Study_Allowance: "0", test…} 

Если вы хотите удалить пробелы только в keys используйте:

 for(var key in o) { var new_key = String(key).replace(/ /g,"_"); object_without_spaces[new_key]=o[key]; } 

Надеюсь это поможет.


 var o ={ "Housing": 0, "Late Comers": 0, "Income cut": "12500", "Study Allowance": 0, "test": 0, "i": 0, "staff_no": "9", "staff_name": "Abeja Vicky", "staff_department": "Production Staff", "staff_position": "Production Manager", "staff_salary": "0", "GrossValue": 12500, "GrossSalary": 0, "NSSF": 0, "PAYE": 0, "GrossValueAddiotion": 0, "GrossValueDecuction": 12500, "netPay": -12500, "Balance": 0, "Paidx": 0, "balance": -12500 } var object_without_spaces ={}; for(var key in o) { var value = String(o[key]).replace(/ /g,"_"); var key = String(key).replace(/ /g,"_"); object_without_spaces[key]=value; } console.log(object_without_spaces); 

Другая альтернатива

Некоторые из размещенных решений не работают при тестировании, особенно когда вход немного изменяется. @ ответ itsgoingdown на самом деле работает лучше всего (проголосовали), потому что он фильтрует перед клонированием объекта.

Несмотря ни на что, я думал, что отправлю свой ответ в качестве альтернативы. Он использует методы JSON stringify и parse для мелкого клонирования объекта. Это устраняет необходимость фильтровать свойства в цикле for. В идеале, также нужно было бы проверить конфликты имен до изменения имени свойства. Это не было сделано ни в одном из решений.

Проверьте «Показать код», а затем «Выполнить», чтобы попробовать.

 // Same as JSON.stringify, but replaces whitespace in property names. function stringify(obj, replacer, space) { var key, prop, copy = JSON.parse(JSON.stringify(obj)); for (prop in copy) { key = prop.replace(/\W/g, '_'); if (key != prop) { copy[key] = copy[prop]; delete copy[prop]; } } return JSON.stringify(copy, replacer, space); } 
 // Same as JSON.stringify, but replaces whitespace in property names. function stringify(obj, replacer, space) { var key, prop, copy = JSON.parse(JSON.stringify(obj)); for (prop in copy) { key = prop.replace(/\W/g, '_'); if (key != prop) { copy[key] = copy[prop]; delete copy[prop]; } } return JSON.stringify(copy, replacer, space); } var data = { "test 1": function(a) { return 1; }, "test 2": [1, 2, 3, 4, 5], "test 3": "Hello World!", "Housing": 0, "Late Comers": 0, "Income cut": "12500", "Study Allowance": 0, "i": 0, "staff_no": "9", "staff_name": "Abeja Vicky", "staff_department": "Production Staff", "staff_position": "Production Manager", "staff_salary": "0", "GrossValue": 12500, "GrossSalary": 0, "NSSF": 0, "PAYE": 0, "GrossValueAddiotion": 0, "GrossValueDecuction": 12500, "netPay": -12500, "Balance": 0, "Paidx": 0, "balance": -12500 }; document.getElementById('stdout').innerHTML = stringify(data, false, ' '); 
 <xmp id="stdout"></xmp>