1

这是我要抓取的示例页面...

[
[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 数组,对吧?)。

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

4

4 回答 4

1

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

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

$fixedJSON = str_replace("'", '"', $str);
$data = json_decode($fixedJSON);

foreach($data as $row)
{
    echo $row[2]; // Saturday, Aug 18 2012
}

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

于 2013-07-16T11:43:41.543 回答
1

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

<?php
  $str  = preg_replace( "/'(.+?)'/", '"$1"', $str );
  var_dump( json_decode( $str ) );
?>
于 2013-07-16T11:50:07.683 回答
0

它应该是:

$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
于 2013-07-16T11:41:14.787 回答
0

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

  var jsonarray = json_decode($str, true);

  var len = jsonarray.length
  for (var i=0; i<len; ++i) {
       var s = myStringArray[i];
  }
于 2013-07-16T11:48:15.207 回答