как-то возможно перебрать весь JSON и преобразовать все значения в строку?
Например из этого:
{
"obj1": [{
"n1": "n",
"n2": 1,
"n3": true
},
{
"n1": "n",
"n2": 1,
"n3": null
}]
}
В это:
{
"obj1": [{
"n1": "n",
"n2": "1",
"n3": "true"
},
{
"n1": "n",
"n2": "1",
"n3": "null"
}]
}
Что ж. да. В чем проблема? Разбираем JSON? Итерации по объектам? Итерации по массивам? Преобразование нулей в строки?
@SteveDrake - Вопрос помечен javascript



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Одним из вариантов было бы использовать естественно рекурсивную природу JSON.stringify и использовать функцию reviver для преобразования всех не объектных (и ненулевых) значений в строки:
const input = {
"obj1": [{
"n1": "n",
"n2": 1,
"n3": true
},
{
"n1": "n",
"n2": 1,
"n3": null
}
]
};
const json = JSON.stringify(input);
const withStrings = JSON.parse(json, (key, val) => (
typeof val !== 'object' && val !== null ? String(val) : val
));
console.info(withStrings);Это гениальное решение. Я не знал, что parse принимает функцию оживления!
Вы можете сделать это, если объедините String() с Object.keys().
var obj1 = [{
"n1": "n",
"n2": 1,
"n3": true
},
{
"n1": "n",
"n2": 1,
"n3": null
}];
var new_array = [];
obj1.forEach(function(o){
var e = {};
Object.keys(o).forEach(function(k){
var v = o[k];
e[k] = String(v);
});
new_array.push(e);
});
console.info(new_array);Мы можем преобразовать объект в строку JSON, после чего мы можем использовать метод замены, чтобы добиться того, что вам нужно.
Давайте рассмотрим, что переменная test имеет объект JSON, как вы показали. Тогда мы можем использовать
let tmp = JSON.stringify(test)
.replace(/:(\d+)([,\}])/g, ':"$1"$2')
.replace(/:(true|false|null)/g, ':"$1"');
Теперь вы можете разобрать tmp обратно в JSON, чтобы получить желаемый результат.
Это не работает для десятичных значений
что ты уже испробовал? Пожалуйста, взгляните на stackoverflow.com/help/mcve