JavaScript удалить текст с двойной кавычкой не работает

У меня есть объект 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('{/"/":','')

Есть идеи?

10000