为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JavaScript代码中获取JavaScript对象?

如何在JavaScript代码中获取JavaScript对象?

慕仙森 2021-04-01 10:11:55
我想要parseParameter像下面的代码那样解析JSON。 someCrawledJSCode被抓取的JavaScript代码。const data = parseParameter(someCrawledJSCode);console.log(data);  // data1: {...}问题我正在使用puppeteer抓取一些JavaScript代码,并且想从中提取JSON对象,但是我不知道如何解析给定的JavaScript代码。抓取的JavaScript代码示例:const somecode = 'somevalue';arr.push({  data1: {    prices: [{      prop1: 'hi',      prop2: 'hello',    },    {      prop1: 'foo',      prop2: 'bar',    }]  }});在这段代码中,我想获取prices数组(或data1)。我做了什么我尝试将代码解析为JSON,但无法正常工作。因此,我搜索了解析工具并获得了Esprima。但是我认为这对解决这个问题没有帮助。
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

刮is将是丑陋的。假设您要解析的字符串有一些假设,您可以:

  1. 提取被推入数组的部分

  2. 将该字符串转换为有效的JSON:

    • 将字符串文字的定界单引号替换为双引号;

    • 用双引号将未加引号的属性名称引起来;

    • 删除最后一个属性后的结尾逗号

为了可靠地做到这一点,您必须编写一个与JSON解析器一样复杂的解析器,但是在某些假设的情况下,它可能可以简化为:

// Sample data

var someCrawledJSCode = `

const somecode = 'somevalue';

arr.push({

  data1: {

    prices: [{

      prop1: 'hi',

      prop2: 'hello',

    },

    {

      prop1: 'foo',

      prop2: 'bar',

    }]

  }

});`;



var obj;

var notJson = someCrawledJSCode.replace(/\.push\(([^]*?)\)/, (_, notJson) => {

    // Try to turn the string into valid JSON:

    // 1. string literals should not be enclosed in single, but double quotes

    // 2. property names should be enclosed in double quotes

    // 3. there should be no trailing comma after the last property

    var json = notJson.replace(/'((\\.|[^\\'])*)'/g, '"$1"')

                      .replace(/(\w+):/g, '"$1":')

                      .replace(/,\s*}/g, "}");

    obj = JSON.parse(json);

});

console.log(obj);

事情仍然可能出错,但是至少您没有使用eval。例如,如果您的字符串文字具有与content匹配的内容(\w+):,则上述内容将更改该字符串。当然可以使解析更可靠...


查看完整回答
反对 回复 2021-04-22
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号