从字符串读取值,看起来像jSon格式

时间:2018-05-31 06:54:54

标签: javascript jquery jquery-cookie

我有以下格式存储的cookie值

  

{时间戳:' HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V + n2CcOg ==',必要:真,偏好:真,统计:真,销售:假,VER:1}

我需要阅读

的以下值
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

3 个答案:

答案 0 :(得分:3)

你没有JSON格式 - 你有更接近JS对象文字表示法的东西,除了它是一个字符串而不是JS代码,所以不幸的是不能使用const input = "{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}" const object = eval("(" + input + ")"); alert(object.necessary);

如果值没有逗号或冒号,您可以用逗号和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);是另一种选择,但这不安全。

答案 1 :(得分:2)

def my_helper if_reachable do return my_service.load_data end end (换算此字符串。然后像显示一样解析

注意!但您需要确保)字符串(从cookie收到)不包含错误的代码。如未知的注入功能。在这种情况下,该函数将在客户端浏览器上执行,可以访问私有数据(cookie,localStorage,来自html表单的数据)。



input




答案 2 :(得分:1)

如何将字符串按摩成适当的JSON,将其解析为JSON对象,然后使用那里的字段?

稳定性较差,因为对输入字符串的更改可能会破坏函数,但是由于它调用JSON.parse()而不是eval()是安全的。

   function reformatCookieInput(inputString) {
    inputString = inputString.replace(/'/g, "");  //global strip out single quotes currently wrapping stamp
    inputString = inputString.replace(/,/g, `", "`); //global replace commas with wrapped commas
    inputString = inputString.replace(/:/g, `":"`); //same idea with colons
    inputString = inputString.replace("{", `{"`); //rewrap start of JSON string
    inputString = inputString.replace("}", `"}`); //rewrap end of JSON string

    return inputString;
}

const input = `{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}`;

const properJSONObject = JSON.parse(reformatCookieInput(input));
console.log(properJSONObject);