Как преобразовать объект JavaScript в LITERAL строку? - PullRequest
0 голосов
/ 29 января 2019

Если у меня есть литерал объекта:

{a: "hello"}

Есть ли функция Javascript для преобразования этого объекта в литеральную строку, чтобы на выходе был буквальный синтаксис:

'{a: "hello"}'

При JSON.stringify выход будет

'{"a": "hello"}'

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Вы можете сделать это с помощью JSON.stringify, а затем с помощью String.replace, как показано ниже:

var jsObj =
{
    abc: "hello",
    bca: "allo",
    cab: "dd:cc",
    d: ["hello", "llo", "dd:cc"],
    e: {abc: "hello", bca: "allo", cab: "dd:cc"}
};

function format(obj)
{
    var str = JSON.stringify(obj, 0, 4),
        arr = str.match(/".*?":/g);

    for(var i = 0; i < arr.length; i++)
        str = str.replace(arr[i], arr[i].replace(/"/g,''));

    return str;
}

console.log(format(jsObj));
0 голосов
/ 29 января 2019

Преобразует его в буквальный синтаксис.Вы можете создавать объекты с несколькими формами синтаксиса.Допустимы оба следующих объявления объекта:

var a = {a: "a"}
var b = {"b": "b"}

Если вы хотите удалить "" вокруг ключа, вы сможете сопоставить их со следующим регулярным выражением / \ "(. *?) \": / g и замените их на что-то вроде этого:

function reformat(str) {
    var myRegexp = /\"(.*?)\":/g;
    match = myRegexp.exec(str);
    while (match != null) {
        str = str.replace(match[0], match[1] + ":");
        match = myRegexp.exec(str);
    }

    return str;
}

Надеюсь, это поможет:)

0 голосов
/ 29 января 2019

Хорошо, просто для удовольствия ... кататься самостоятельно

const stringify = (obj) => {
    // Iterate over keys, reducing to a string
    let str = Object.keys(obj).reduce((acc, cur) => {
        let next = `${cur}: "${obj[cur]}"`;
        return acc
            ? `${acc}, ${next}`
            : `{${next}`;
    }, '');
    
    // Return, appending final '}'
    return `${str}}`;
}

document.write(stringify({
    foo:1,
    bar:'seat'
}));

Тем не менее, ваши точные требования не ясны, поэтому я не уверен, что они им будут соответствовать.Но это может быть отправной точкой, если нет собственного работающего решения.

0 голосов
/ 29 января 2019

В JavaScript нет встроенных функций, которые преобразуют объект в строковое представление, которое либо:

  • Использует идентификаторы вместо строк для имен свойств
  • Представляет оригиналсинтаксис, используемый для создания объекта

Вы можете написать свою собственную функцию для первого (по крайней мере, когда имя свойства может быть представлено в виде литерала), но последнее невозможно какJavaScript не хранит информацию об исходном коде, использованном для создания объекта.

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