使用结构语言从json字符串中提取数据

时间:2016-08-30 16:54:43

标签: php json

我不知道这件事是否存在或是否已经存在最佳实践。

我有一个json字符串,我想知道是否可以使用像sql中的查询字符串从这个json中提取数据。

这个json的例子:

    [
  {
    "user": [
      {
        "id": 1,
        "name": "Smith",
        "visits": [
          {
            "id": 1,
            "date": "2016-08-30 16:00:00",
            "pageViews": 18
          }
        ]
      },
      {
        "id": 2,
        "name": "Willis",
        "visits": [
          {
            "id": 2,
            "date": "2016-08-30 18:00:00",
            "pageViews": 34
          }
        ]
      }
    ]
  }
]

如果我执行像SELECT user.name WHERE user.visits.pageViews > 20这样的查询,我会得到威利斯

否则,在PHP中执行类似操作的最佳方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

使用jq这是工作的正确工具。假设39233103.json包含问题中的示例输入。

示例运行

$ jq '.[]|.user[]|select(.visits[].pageViews>20)|.name' 39233103.json
"Willis"

raw output使用-r选项

$ jq -r '.[]|.user[]|select(.visits[].pageViews>20)|.name' 39233103.json
Willis

现在从php中可以使用[ exec ]。假设以下脚本名为39233103.php

<?php
$output=array();
exec("jq -r '.[]|.user[]|select(.visits[].pageViews>20)|.name' 39233103.json", $output);
foreach ($output as $val){
echo $val."\n";
}
?>

<强>输出

$ php 39233103.php
Willis

如果您不熟悉jq[ this ]是一个很好的起点。