JSON to JS Object и удаление кавычек на ключах

У меня есть следующий JSON:

{
  "apps": {
    "1C-Bitrix": {
      "cats": [
        1
      ],
      "headers": {
        "Set-Cookie": "BITRIX_",
        "X-Powered-CMS": "Bitrix Site Manager"
      },
      "html": "(?:<link[^>]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))",
      "implies": "PHP",
      "script": "1c-bitrix",
      "website": "www.1c-bitrix.ru",
      "icon": "1C-Bitrix.png"
    },
    "1und1": {
      "cats": [
        6
      ],
      "implies": "PHP",
      "url": "/shop/catalog/browse\\?sessid=",
      "website": "1und1.de",
      "icon": "1und1.png"
    }
}

Я хочу превратить его в объект Javascript, удаляя двойные кавычки на ключах и двойные escape-символы в выражениях regex.

Есть ли способ сделать это, я боролся с узлом и JSON.stringify, и я просто не могу получить правильный вывод.

Причина, по которой я хочу это сделать, заключается в следующем:

(function() {
    //'use strict';

    if ( wappalyzer == null ) return;

    var w = wappalyzer;

    w.apps = {
        '1C-Bitrix': {
            cats: [ 1 ],
            headers: { 'X-Powered-CMS': /Bitrix Site Manager/, 'Set-Cookie': /BITRIX_/i },
            html: /<link[^>]+components\/bitrix|(src|href)=("|')\/bitrix\/(js|templates)/i,
            script: /1c\-bitrix/i,
            implies: [ 'PHP' ]
        },
        '1und1': {
            cats: [ 6 ],
            url: /\/shop\/catalog\/browse\?sessid\=/,
            implies: [ 'PHP' ]
        }
    };

})();

Ожидается объект Javascript (w.apps)

Если я заменю на JSON, как это, это не удастся:

(function() {
    //'use strict';

    if ( wappalyzer == null ) return;

    var w = wappalyzer;

    w.apps = {
        "1C-Bitrix": {
          "cats": [
            1
          ],
          "headers": {
            "Set-Cookie": "BITRIX_",
            "X-Powered-CMS": "Bitrix Site Manager"
          },
          "html": "(?:<link[^>]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))",
          "implies": "PHP",
          "script": "1c-bitrix",
          "website": "www.1c-bitrix.ru",
          "icon": "1C-Bitrix.png"
        },
        "1und1": {
          "cats": [
            6
          ],
          "implies": "PHP",
          "url": "/shop/catalog/browse\\?sessid=",
          "website": "1und1.de",
          "icon": "1und1.png"
        }
    };

})();

1 ответ

Вы можете просто вставить этот объект в JavaScript, он правильно его интерпретирует:

var obj = {
  "apps": {
    "1C-Bitrix": {
      "cats": [
        1
      ],
      "headers": {
        "Set-Cookie": "BITRIX_",
        "X-Powered-CMS": "Bitrix Site Manager"
      },
      "html": "(?:<link[^>]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))",
      "implies": "PHP",
      "script": "1c-bitrix",
      "website": "www.1c-bitrix.ru",
      "icon": "1C-Bitrix.png"
    },
    "1und1": {
      "cats": [
        6
      ],
      "implies": "PHP",
      "url": "/shop/catalog/browse\\?sessid=",
      "website": "1und1.de",
      "icon": "1und1.png"
    }
  }
};

document.body.innerText = "See, no escaping: " + obj.apps['1und1'].url;

Если вы получите этот JSON в виде строки (например, в результате вызова AJAX), вы можете использовать JSON.parse преобразовать строку JSON в объект:

var ajaxResult = "{ \"apps\": { \"1C-Bitrix\": { \"cats\": [ 1 ], \"headers\": { \"Set-Cookie\": \"BITRIX_\", \"X-Powered-CMS\": \"Bitrix Site Manager\" }, \"html\": \"(?:<link[^>]+components\/bitrix|(?:src|href)=\\\"\/bitrix\/(?:js|templates))\", \"implies\": \"PHP\", \"script\": \"1c-bitrix\", \"website\": \"www.1c-bitrix.ru\", \"icon\": \"1C-Bitrix.png\" }, \"1und1\": { \"cats\": [ 6 ], \"implies\": \"PHP\", \"url\": \"\/shop\/catalog\/browse\\\\?sessid=\", \"website\": \"1und1.de\", \"icon\": \"1und1.png\" } } }";

var obj = JSON.parse(ajaxResult);

document.body.innerText = "See, no escaping: " + obj.apps['1und1'].url;

Другие вопросы по тегам