XSJsonDataSource
包 | XS.util |
---|---|
继承关系 | class XSJsonDataSource » XSDataSource |
版本 | 1.0.0 |
源代码 | sdk/php/util/XSDataSource.class.php |
JSON 数据源
要求以 \n (换行符) 分割, 每行为一条完整的 json 数据
Public 方法
名称 | 描述 | 定义于 |
---|---|---|
__construct() | 构造函数 | XSDataSource |
getCharset() | 取得数据源的准确字符集 | XSDataSource |
getData() | 从数据源中提取一条数据 | XSDataSource |
instance() | 取得数据源对象实例 | XSDataSource |
Protected 方法
名称 | 描述 | 定义于 |
---|---|---|
deinit() | XSJsonDataSource | |
getDataList() | XSJsonDataSource | |
init() | XSJsonDataSource |
方法明细
deinit()
方法
protected void deinit()
|
源码: sdk/php/util/XSDataSource.class.php#L290 (显示)
protected function deinit()
{
if ($this->fd)
{
fclose($this->fd);
$this->fd = null;
}
}
getDataList()
方法
protected void getDataList()
|
源码: sdk/php/util/XSDataSource.class.php#L299 (显示)
protected function getDataList()
{
// read line (check to timeout?)
$line = '';
while (true)
{
$buf = fgets($this->fd, 8192);
if ($buf === false || strlen($buf) === 0)
break;
$line .= $buf;
if (strlen($buf) < 8191 || substr($buf, - 1, 1) === "\n")
break;
}
// empty line (end of file)
if (empty($line))
{
echo "INFO: reach end of the file, total lines: " . $this->line . "\n";
return false;
}
// try to decode the line
$this->line++;
$line = rtrim($line, "\r\n");
if (strlen($line) === 0)
{
echo "WARNING: empty line #" . $this->line . "\n";
return $this->getDataList();
}
$item = json_decode($line, true);
if (!is_array($item) || count($item) === 0)
{
switch (json_last_error())
{
case JSON_ERROR_DEPTH:
$error = ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_CTRL_CHAR:
$error = ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
$error = ' - Syntax error, malformed JSON';
break;
default :
$error = (count($item) === 0 ? ' - Empty array' : '');
break;
}
echo "WARNING: invalid line #" . $this->line . $error . "\n";
return $this->getDataList();
}
return array($item);
}
init()
方法
protected void init()
|
源码: sdk/php/util/XSDataSource.class.php#L277 (显示)
protected function init()
{
$file = $this->arg;
if (empty($file))
{
echo "WARNING: input file not specified, read data from <STDIN>\n";
$file = 'php://stdin';
}
if (!($this->fd = fopen($file, 'r')))
throw new XSException("Can not open input file: '$file'");
$this->line = 0;
}