我不知道这件事是否存在或是否已经存在最佳实践。
我有一个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中执行类似操作的最佳方法是什么?
由于
答案 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 ]是一个很好的起点。