Чтение значения из строки, которая выглядит как формат jSon - PullRequest
0 голосов
/ 31 мая 2018

У меня есть значение cookie, сохраненное в следующем формате

{stamp: 'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V + n2CcOg ==', обязательно: true, предпочтения: true, статистика: true, true, marketing,}

и мне нужно прочитать следующие значения

necessary
preferences
statistics
marketing

Не уверен, как правильно читать значения, я попробовал следующий код, предполагая, что это формат jSON

        Cookies.get('CookieConsent')

        //Parse the cookie to Object

        cookieval = Cookies.get('CookieConsent');
        console.log(cookieval);

        console.log("Necessary: " + Boolean(cookieval.necessary));
        console.log("Prefrences: " + Boolean(cookieval.preferences));
        console.log("Statistics: " + Boolean(cookieval.statistics));
        console.log("Marketing: " + Boolean(cookieval.marketing));

Но этот код всегда возвращает false.

Я использую следующий Jquery для чтения значений Cookie https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

У вас нет формата JSON - у вас есть что-то ближе к буквенной нотации объекта JS, за исключением того, что это строка, а не код JS, поэтому, к сожалению, нельзя использовать JSON.parse.

Если значения неЕсли у вас нет запятых или двоеточий, вы можете split строку запятыми и reduce в объект:

const input = `{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}`;
const obj = input
  .slice(1, input.length - 1)
  .split(',')
  .reduce((obj, str) => {
    const [key, val] = str.split(':');
    obj[key] = val;
    return obj;
  }, {});
console.log(obj);

eval - еще один вариант, но он небезопасен.

0 голосов
/ 31 мая 2018

Оберните эту строку по ( и ).Затем выполните синтаксический анализ, как показано ниже:

Внимание! Но вам нужно убедиться, что строка input (полученная из cookie) не содержит неверный код.Например, неизвестная введенная функция.В этом случае функция будет выполняться в браузере клиента с доступом к личным данным (cookie, localStorage, данным из html-форм).

const input = "{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}"
const object = eval("(" + input + ")");
alert(object.necessary);
...