代码之家  ›  专栏  ›  技术社区  ›  Learning

从类似json格式的字符串中读取值

  •  2
  • Learning  · 技术社区  · 6 年前

    我有以下格式的cookie值

    {戳记:'hmzwojn8v4zkdrn1ddumhlhs3dkiddr6voxcjjeudmo2w6v+n2ccog=',必需:true,首选项:true,统计信息:true,市场营销:false,版本: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

    2 回复  |  直到 6 年前
        1
  •  3
  •   CertainPerformance    6 年前

    你没有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 是另一种选择,但那是不安全的。

        2
  •  2
  •   vihtor    6 年前

    把这根线包起来 ( ) . 然后按如下所示解析

    注意! 但你需要确保 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);