以json内容格式返回文件

时间:2016-02-19 10:34:50

标签: php json

我有一个这种结构的txt文件:

17/02/2016 9:50 [info] "hello"
17/02/2016 10:20 [debug] "world"

现在我试图用以下方式阅读:

$fh = fopen($this->_logPath, "r");
$content = array(); 

while ($line = fgets($fh))
{
    array_push($content, $line);
}
fclose($fh);

return json_encode($content);

该文件已正确加入,但在我的Chrome扩展程序中尝试使用Rest API,我会进入json标签:

  

意外字符串

如何返回json内容中的每一行?例如,结果如下:

"trace": {
     info: {
         date: {
             "17/02/2016 9:50" {
                -"content": "hello"
            }     
         }
       } 
     debug: {
          date: { 
             "17/02/2016 10:20" {
               -"content": "world"
              }  
          }
       }
    }

如果有人有更好的组织,我很乐意看到。

1 个答案:

答案 0 :(得分:3)

我会选择这样的结构:

{  
   "trace":[  
      {  
         "date":"17/02/2016 9:50",
         "level":"debug",
         "message":"hello"
      },
      { 
         "date":"17/02/2016 9:50",
         "level":"debug",
         "message":"hello"
      }
   ]
}

请注意,trace包含一个logitems数组。 要解析您的文件,以下应该可以工作:

$fh = fopen($this->_logPath, "r");
$content = array(); 
$content["trace"] = array();

while ($line = fgets($fh))
{
    $raw = preg_split("/[\[\]]/", $line); //splits string at [ and ], results in an array with three items
    $entry = array();
    $entry["date"] = trim($raw[0]);
    $entry["level"] = trim($raw[1]);
    $entry["message"] = trim($raw[2]);
    $content["trace"][] = $entry;
}
fclose($fh);
return json_encode($content);

对于使用json进行实验,您可能会喜欢https://jsonformatter.curiousconcept.com/,我总是觉得它很有用。