从看起来像 jSon 格式的字符串中读取值
Read value from string which looks like jSon format
我以以下格式存储了 cookie 值
{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,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));
但是这段代码总是returns false。
我使用以下 Jquery 来读取 Cookie 值 https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js
用 (
和 )
包裹这个字符串。然后像显示一样解析 follow
注意! 但您需要确保 input
字符串(从 cookie 接收)不包含错误代码。比如未知的注入函数。在这种情况下,该函数将在客户端浏览器上执行,可以访问私有数据(cookie、localStorage、来自 html-forms 的数据)。
const input = "{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}"
const object = eval("(" + input + ")");
alert(object.necessary);
你没有 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
是另一种选择,但不安全。
如何将字符串修改为适当的 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);
我以以下格式存储了 cookie 值
{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,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));
但是这段代码总是returns false。
我使用以下 Jquery 来读取 Cookie 值 https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js
用 (
和 )
包裹这个字符串。然后像显示一样解析 follow
注意! 但您需要确保 input
字符串(从 cookie 接收)不包含错误代码。比如未知的注入函数。在这种情况下,该函数将在客户端浏览器上执行,可以访问私有数据(cookie、localStorage、来自 html-forms 的数据)。
const input = "{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}"
const object = eval("(" + input + ")");
alert(object.necessary);
你没有 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
是另一种选择,但不安全。
如何将字符串修改为适当的 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);