php - 在 PHP 中过滤 Json 项目
问题描述
我想使用 Ajax 调用传递的术语过滤以下 JSON
{"comuni":[{"datapresub":"08/08/2018","datasub":"01/02/2018","nomeComune":"ROMA","provincia":"RM"},{"nomeComune":"ROMAGNANO AL MONTE","provincia":"SA"},{"nomeComune":"ROMAGNANO SESIA","provincia":"NO"},{"nomeComune":"ROMAGNESE","provincia":"PV"},{"nomeComune":"ROMANA","provincia":"SS"},{"nomeComune":"ROMANENGO","provincia":"CR"},{"nomeComune":"ROMANO CANAVESE","provincia":"TO"},{"nomeComune":"ROMANO D'EZZELINO","provincia":"VI"},{"nomeComune":"ROMANO DI LOMBARDIA","provincia":"BG"},{"nomeComune":"ROMANS D'ISONZO","provincia":"GO"},{"nomeComune":"ROMBIOLO","provincia":"VV"},{"nomeComune":"ROMENO","provincia":"TN"},{"nomeComune":"ROMENTINO","provincia":"NO"},{"nomeComune":"ROMETTA","provincia":"ME"}]}
如果使用的术语是 ROMA,结果应该是
[{"datapresub":"08/08/2018","datasub":"01/02/2018","nomeComune":"ROMA","provincia":"RM"}]
我正在使用以下代码,但我无法创建一个函数来过滤来自 JSON 的数据:
function pippo_action() {
if(!empty($_GET['term'])) {
$term = $_GET['term'];
$request = wp_remote_get( "https://demo.ec2webdesign.com/anpr-dev/comuni.json", array(
'headers' => array('Content-Type' => 'application/json;')
));
if( is_wp_error( $request ) ) {
return false;
}
$body = wp_remote_retrieve_body( $request );
$data = json_decode( $body );
wp_die();
}
}
任何帮助表示赞赏。
谢谢
上面的代码工作正常,但预期的结果只适用于第一项。如果我从列表中选择第二项,我得到以下结果:
{"1":{"datapresub":"08\/08\/2018","datasub":"","nomeComune":"ROMAGNANO AL MONTE","provincia":"SA"}}
反而:
[{"datapresub":"08\/08\/2018","datasub":"","nomeComune":"ROMAGNANO AL MONTE","provincia":"SA"}]
有没有机会让它修改php代码?
谢谢
解决方案
给定这个字符串:
$jsonString = <<<'TAG'
{
"comuni": [
{
"datapresub": "08/08/2018",
"datasub": "01/02/2018",
"nomeComune": "ROMA",
"provincia": "RM"
},
{
"nomeComune": "ROMAGNANO AL MONTE",
"provincia": "SA"
}
]
}
TAG;
以下代码应该可以工作。我已经包含了断言,但您可能应该有更好的验证逻辑。内联注释应该解释逻辑。
// Decode to an object
$jsonData = json_decode($jsonString, false, 512, JSON_THROW_ON_ERROR);
// Quick sanity test
assert(property_exists($jsonData, 'comuni'));
assert(is_array($jsonData->comuni));
// The term we are searching for
$term = 'ROMA';
// Filter our array
$jsonFiltered = array_filter(
$jsonData->comuni,
static function ($item) use ($term) {
assert(property_exists($item, 'nomeComune'));
return $term === $item->nomeComune;
}
);
// Back to JSON
$jsonResult = json_encode($jsonFiltered);
的值为$jsonResult
:
[
{
"datapresub": "08\/08\/2018",
"datasub": "01\/02\/2018",
"nomeComune": "ROMA",
"provincia": "RM"
}
]
推荐阅读
- elixir - 重新编译并重新加载 IEx 而不离开 IEx
- laravel-5 - 找不到“App\Http\Controllers\Product”的类路径
- mongodb - 如何在 Sails 0.12 中通过请求(在部分离线的情况下)连接到远程数据库
- python - 来自字符串的嵌套列表
- php - 在 WooCommerce 中的结帐过程中获取产品 ID
- javascript - ZingTouch 防止用户在输入字段中输入单词
- python - spark show 函数正确显示数据,但是 write 总是抛出错误
- ios - CAGradientLayer 自转
- python - 如何使我的按钮保持突出显示,直到我再次单击我的网格
- android - 在 Activity/Fragment 中,如何获取/等待 ViewModel 协程操作的返回值?