首页 > 解决方案 > 如何使用 jquery 从 Javascript 中提取特定数据字段?

问题描述

我不确定这个问题是否已经被问过,而且我是 jquery 和 javascript 的新手。但是,我找不到与我的问题相关的任何答案。我正在尝试创建一个apify爬虫。我需要从以下 javascript 中提取特定数据

<script type="application/json" class="js-react-on-rails-component">
{
    "assetHost": null,
    "version": "0.0.4-855-gda76bc6\n",
    "availableLocales": [
      "de",
      "en"
    ],
    .........
    "stats": {
        "visitors": [
          {
            "domestic": 600,
            "note": "incl. 250 conference participants",
            "year": 2017,
            "total": 600,
            "structure": null,
            "latest": true
          }
        ],
        "venue": [
          {
            "total": 376,
            "domestic": 376,
            "latest": true,
            "year": 2017
          }
        ],
        "exhibitors": [
          {
            "total_indirect": 0,
            "total": 46,
            "domestic": 46,
            "latest": true,
            "year": 2017
          }
        ]
      },

      ..........
      </script>

我需要获取字段:totaldomestic使用exhibitorsjquery。我试过这个查询(JSON.parse($('.js-react-on-rails-component').text())).exhibitors.total.text().trim()但它没有返回任何东西。因此,我尝试创建一个变量并在结果上调用它,如下所示:

function pageFunction(context) {
    var $ = context.jQuery;
    var exhibitor = JSON.parse($('.js-react-on-rails-component').text());
    var total = exhibitor.exhibitors.total;
    var domestic = exhibitor.exhibitors.domestic;

    if (context.request.label === "START") {
    .....
    } else { 
    var result = {
            total: total,
            domestic: domestic
        };
    return result;  
    }
}

但是,这段代码也没有返回任何结果。

标签: javascriptjqueryapify

解决方案


既然你习惯了

(JSON.parse($('.js-react-on-rails-component').text())).exhibitors.total.text().trim()

如果您仔细查看json,则json的existors属性是一个数组,您必须使用existors[i].total和existors [i].domestic where i = 0...N; 而不是你正在使用existors.total 和existors.domestic

首先,为简单起见,请将您的 dom 组件放入一个变量中,

var myJson = JSON.parse($('.js-react-on-rails-component').text());

var total = myJson.stats.exhibitors[i].total;
var domestic = myJson.stats.exhibitors[i].domestic; 

其中 i = 0...N;

编辑:

请看下面的例子

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>

<body>

    <div></div>    
    
    <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
    
    
    <script type="application/json" id="myjsonscript">
        {
        "stats": {
        "visitors": [
        {
        "domestic": 600,
        "note": "incl. 250 conference participants",
        "year": 2017,
        "total": 600,
        "structure": null,
        "latest": true
        }
        ],
        "venue": [
        {
        "total": 376,
        "domestic": 376,
        "latest": true,
        "year": 2017
        }
        ],
        "exhibitors": [
        {
        "total_indirect": 0,
        "total": 46,
        "domestic": 46,
        "latest": true,
        "year": 2017
        }
        ]
        }
        }
    </script>

    
    <script id='script' type='text/javascript'>

        var myJson = JSON.parse($('#myjsonscript').text());
        $('div').html(myJson);

        var total = myJson.stats.exhibitors[0].total;
        var domestic = myJson.stats.exhibitors[0].domestic;

        alert('total:' + total);
        alert('domestic: ' + domestic);
    </script>

</body>
</html>


推荐阅读