Я хочу удалить все пробелы между ключами или имена объектов перед тем, как их декодировать, используя метод 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>