首页 > 解决方案 > 将字符串“对象”转换为对象

问题描述

我需要转换inlineScriptsTexts为对象,因为我需要从中获取值。但我不知道,如何将此字符串解析为对象。[JSON.parse][1]没有按预期工作。是否有一些解决方案,可以将此字符串转换为对象(如图像)?

图像

window.onload = function() {
  let objExist = false;
  let inlineScripts = document.body;
  let inlineScriptsBlocks = Array.from(inlineScripts.getElementsByTagName('script'));
  inlineScriptsBlocks.forEach(scriptBlock => {
    let inlineScriptsTexts = scriptBlock.innerText;
    if (inlineScriptsTexts.includes('zvkDL')) {
      objExist = true;
      console.log(inlineScriptsTexts);
    }
  });

  //console.log(objExist);
}
zvkDL = {
            'language' : 'cs',
            'currency' : 'czk',
            'event': 'akurva',
            'ecommerce': {
                'purchase': {
                    'actionField': {
                        'id': 555,
                        'revenue': 535535,
                        'shipping': 3535,
                    }
                }
            },
            'eventCallback': function() {
                setGTMcookie( 555 ); // Jak se bude callback jmenovat nechám na vás. Jen to musí být srozumitelné. Pozor na scope JS callbacku.
            },
            'eventTimeout' : 2000,
            'eventCookie': { 'name': 'dasd', 'expires': 'asdsadd', 'value': 'funguje to', }
        };

标签: javascriptjsonparsing

解决方案


JavaScript 中提供的方法eval用于执行包含 JavaScript 源代码的字符串。

在这种情况下,不能使用用于使用“JavaScript Object Notation”中的文本序列化一组受限数据对象的 JSON 字符串,因为 JSON 不支持序列化函数对象。

有两种主要的替代方案eval

  1. Function通过调用全局构造函数将文本转换为函数,或者
  2. 将文本写入服务器上的文件并使用<script>标签将文件下载到浏览器。

调用evalFunction执行代码名声不好,在某些代码环境中可能会受到限制。

在采取任何这些方法之前,我会准确分析问题:字符串来自哪里,通过首先创建脚本来进一步解决源链上的问题是否会更好,是否会克隆现有的源对象而不进行序列化首先是可能的等等。

如果适用,请注意:textContentHTMLScriptElement 的 仅当元素包含内联代码时才能用于访问代码。textContent不会返回下载的脚本文件的代码内容。


推荐阅读