【问题标题】:Scraping from a Javascript Array?从 Javascript 数组中抓取?
【发布时间】:2013-07-16 11:38:10
【问题描述】:

这是我试图抓取的示例页面...

[
[4056, 1, 'Saturday, Aug 18 2012', '15:00', 171],
[4057, 1, 'Saturday, Aug 18 2012', '15:00', 94],
[4058, 1, 'Saturday, Aug 18 2012', '15:00', 175],
[4059, 1, 'Saturday, Aug 18 2012', '15:00', 29],
[4051, 1, 'Saturday, Aug 18 2012', '15:00', 13],
[4053, 1, 'Saturday, Aug 18 2012', '15:00', 170],
[4055, 1, 'Saturday, Aug 18 2012', '17:30', 23],
[4060, 1, 'Sunday, Aug 19 2012', '13:30', 194],
[4054, 1, 'Sunday, Aug 19 2012', '16:00', 16],
[4052, 1, 'Monday, Aug 20 2012', '20:00', 31],
[4123, 1, 'Wednesday, Aug 22 2012', '19:45', 15]
]

这是我通常用于类似的代码...

$str = file_get_contents('http://www.thewebsite.com/info/');
$jsonarray = json_decode($str, true);

$id = $jsonarray['id'];

但正如你所看到的......这不一样。另外,我什至不知道第一页是否是 JSON(它是一个 JS 数组,对吧?)。

我将如何从中刮取单个项目以放入变量/数组中?

【问题讨论】:

    标签: php javascript json file-get-contents


    【解决方案1】:

    数据不是有效的 JSON,因为它使用单引号而不是双引号来包装字符串。

    如果您知道内容将不包含其他单引号,而不是字符串包装器,那么您可以简单地将单引号替换为双引号以更正 JSON 格式。

    $fixedJSON = str_replace("'", '"', $str);
    $data = json_decode($fixedJSON);
    
    foreach($data as $row)
    {
        echo $row[2]; // Saturday, Aug 18 2012
    }
    

    如果内容可能包含字符串包装以外的单引号,那么更正 JSON 将更加困难,因为您只需要替换包装引号并处理可能会或可能不会转义的数据中的引号。例如双引号需要转义,单引号需要删除转义。

    【讨论】:

    • 是的.. 每次都是这样,您的解决方案有效。感谢您保持简单
    • 没问题 :) 编码愉快!
    【解决方案2】:

    对不起,一个丑陋的解决方案:\你也可以使用str_replace

    <?php
      $str  = preg_replace( "/'(.+?)'/", '"$1"', $str );
      var_dump( json_decode( $str ) );
    ?>
    

    【讨论】:

      【解决方案3】:

      应该是:

      $str = file_get_contents('http://www.thewebsite.com/info/');
      $jsonarray = json_decode($str, true);
      
      $id = $jsonarray[0][0]; // 4056
      $id1 = $jsonarray[1][0]; // 4057
      // etc
      

      【讨论】:

      • @Matyunin 我试过这个,但它不起作用.. 什么都没有。
      • 是的,有问题的数据不是有效的 JSON,我们需要像第一个答案一样使用$fixedJSON = str_replace("'", '"', $str);
      【解决方案4】:

      将数组保存在变量中.....

        var jsonarray = json_decode($str, true);
      
        var len = jsonarray.length
        for (var i=0; i<len; ++i) {
             var s = myStringArray[i];
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-23
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多