Отформатируйте данные объекта в требуемый формат - PullRequest
1 голос
/ 26 марта 2020

сервер хочет, чтобы я отправил объект, например {"ключ": "значение", "ключ2": "значение2"}, но иногда пользователь вводит {ключ: значение, ключ1: значение1} или {ключ: "значение", ключ2 : "value2"}, в нем отсутствует двойная кавычка, так как я могу преобразовать весь неправильный формат в целевой объект? Обратите внимание, что когда я получаю значение из формы, данные будут иметь двойные кавычки, такие как "{key:" value "}"

1 Ответ

0 голосов
/ 16 апреля 2020

Похоже, что сервер ожидает формат JSON (application / json), тогда:

{key: value, key1: value1} не является допустимым JSON

{key: "value", key2: "value2"} is недопустимо JSON

Если вы получаете эти значения из какого-либо поля ввода (HTML), то вы можете создать проверку перед отправкой значений на сервер и запросом пользователей исправить данные. , Эта проверка может быть легко разработана с помощью объекта JavaScript JSON, например:

function isJSONValid(str) {
    let isValid = false;
    try {
        JSON.parse(str);
        isValid = true;
    }
    catch (x) {}
    return isValid;
}

Но если вы действительно хотите автоматически исправить входные данные, это может быть довольно сложно, потому что это трудно понять все виды ошибок, которые может сделать пользователь (если не невозможно). Вы упомянули простой JSON, но что если у него есть массивы, JSON внутри JSON и т. Д. c? Например:

{ "field1": "{ field2: [ value1, "value2"] }", field3: value3 }

Обратите внимание, что в моем примере выше, есть несколько ошибок.

Если вы хотите автоматически исправлять только ошибки в кавычках для простых JSON (без учета массивов, цифр * 1031) * значения, JSON внутри JSON, et c), код ниже может помочь. Но даже в этом случае возможны и другие ошибки. Проверка важна!

function adjustQuotationMarks(str) {
    let newStr = str;
    newStr = newStr.replace(/"/g, '');
    newStr = newStr.replace(/{/g, '{ ');
    newStr = newStr.replace(/ ([^ ]+):/g, '"$1":');
    newStr = newStr.replace(/:([^:]+),/g, ':"$1",');
    newStr = newStr.replace(/:([^:]+)}/g, ':"$1"}');
    let newObj = {};
    JSON.parse(newStr, (key, value) => {
        if (value.trim) newObj[key] = value.trim();
    });

    return JSON.stringify(newObj);
}

Удачи.

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