Regexp: удалить кавычки из списка json - PullRequest
0 голосов
/ 03 декабря 2008

У меня есть массив объектов в формате json:

[
    {
        "name": "obj1",
        "list": [
            "elem1",
            "elem2",
            "elem3"
        ]
    },
    {
        "name": "obj2",
        "list": [
            "elem4",
            "elem5",
            "elem6"
        ]
    }
]

Теперь я хотел бы создать регулярное выражение для удаления кавычек вокруг элементов в «списке», используя JavaScript.

Желаемый результат:

[{"name":"obj1", "list":[elem1, elem2, elem3]},
 {"name":"obj2", "list":[elem4, elem5, elem6]}]

Ответы [ 3 ]

1 голос
/ 04 декабря 2008

Если [elem1, elem2, elem3] станут ссылками на элементы DOM или даже на существующие переменные, то, возможно, лучшим способом будет преобразование вашей строки JSON в объект JavaScript и последующая замена этих строк.

Например, если все они являются значениями идентификатора элемента DOM, после преобразования строки JSON в объект вы можете просто сделать object["list"][0] = document.getElementById(object["list"][0]) или то, что когда-либо имеет смысл для вашего объекта.

1 голос
/ 03 декабря 2008

Это работает, но это не чистое регулярное выражение:

var str = '[{"name":"obj1", "list":["elem1", "elem2", "elem3"]},'
        + '{"name":"obj2", "list":["elem4", "elem5", "elem6"]}]';
str = str.replace(/"list":\[[^\]]+\]/g, function (match) {
    return '"list":' + match.substring(7, match.length).replace(/([^\\])"/g, '$1');
});
document.write(str);

По сути, он делит процесс на две части: во-первых, найдите подстроки списка; а во-вторых, удалите из них апострофы.

Вы можете сделать это с чистым регулярным выражением, если javascript поддерживает переменную длину, а это не так.

Отредактировано, чтобы разрешить экранированные апострофы в элементах списка, как предложено MrP.

0 голосов
/ 07 декабря 2008

Это должно решить проблему, как вы ее описали:

str = str.replace(/"(?=[^\[]*\])/g, '');

После сопоставления кавычки предварительный просмотр проверяет, есть ли впереди закрывающая квадратная скобка, но нет открывающей скобки между ней и текущей позицией. Если JSON правильно сформирован, это означает, что открывающая скобка равна до текущей позиции, поэтому совпадение произошло внутри списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...