У меня есть объект JSON в таблице, как показано ниже
filter: {where: { AND:[{gender: {IN: "Female"}},{age: {LTE: 44}}]}, relativeDateRange: 90}
который я получаю и нужно изменить, удалив часть текста. Новый объект JSON будет выглядеть ниже
{"filter": {"where": {"gender": {"IN": "Female"}, "age": {"LTE": 54}},"relativeDateRange": 90}}
Один из способов сделать это состоит в том, чтобы упорядочить объект и заменить ключевое слово, которое в моей «теории» должно работать. однако никоим образом я не могу заменить ('{"AND":') на пробел. Проблема в том, что ключевое слово содержит двойную кавычку.
ниже приведен код: s - это объект json, который содержит неправильный json.
var stringified = JSON.stringify(s);
var t1 = stringified.replace("}{",", ").replace("}}]}","}}").replace('{"AND":', '')
var jsonObject = JSON.parse(t1);
console.log("new json:" +jsonObject);
Текст, который не имеет двойной кавычки, заменяется. Даже использование регулярных выражений или escape-символов не помогает.
Любое предложение
Всего 3 ответа
Один из вариантов, который вы можете попробовать, - использовать функцию replacer, которая является параметром в JSON.stringify:
// Your initial filter object
const filter = {filter: {where: { AND:[{gender: {IN: "Female"}},{age: {LTE: 44}}]}, relativeDateRange: 90}};
// Define your replacer function:
const replacer = (name, value) => {
if (name === 'where') {
const array = value['AND'];
// Merge array elements or alter your output in any other way
return Object.assign({}, array[0], array[1]);
}
return value;
}
// The resulting output
console.log(JSON.stringify(filter, replacer, 2));
произведет следующий вывод:
{
"filter": {
"where": {
"gender": {
"IN": "Female"
},
"age": {
"LTE": 44
}
},
"relativeDateRange": 90
}
}
Я не думаю, что это двоеточие отбрасывает ваше текстовое заявление о замене. Как насчет замены строки «И» перед тем, как усложнить ее заменой фигурных скобок? Это не должно повлиять на другие ваши замены.
var t1 = stringified.replace("AND:[","").replace("}{",", ").replace("}}]}","}}");
Окончательное решение или, точнее говоря, проблема, которую я выяснил, заключалась в том, что, когда josn преобразуется в строку, перед каждым словом добавляется «». Как, например, когда ниже JSON является строковым.
filter: {where: { AND:[{gender: {IN: "Female"}},{age: {LTE: 44}}]}, relativeDateRange: 90}
это дает вывод как
filter: {where: { AND ....
И простым решением было использовать замену с двойной обратной косой чертой, как показано ниже.
var t1 = stringified.replace('{\"AND\":','').replace(/}{/g,",").replace("}}},","}},").replace('{/"/":','')