JSON 文件的片段。
{
"products": {
"product" : [
{ "name" : "Desktop", "price" : 799.99, "memory" : "4GB"},
{ "name" : "Laptop", "price" : 999.99, "memory" : "3GB"},
{ "name" : "Notebook", "price" : 899.99, "memory" : "2GB"}
] }}
我需要解析一个非常大的 JSON 文件,然后根据用户查询显示相关的搜索结果。我想避免使用 json_decode 或 file_get_contents 将整个文件加载到内存中,而是逐行解析文件。
$search_results = "";
$Json_file = fopen("products.json", "r");
while (!feof($Json_file)) {
$line_of_data .= fgets($Json_file);
$decoded_line = json_decode($line_of_data);
此时我想使用 if 语句,以便 fgets() 函数仅从 JSON 文件中提取“价格”值低于 900 的数据。下面的 if 语句不起作用 - 它会导致页面完全空白,但代码在没有 if 语句的情况下工作正常。我的问题是:是否有一种“性能友好”的方式来编写 if 语句(此时在代码中),以便可以过滤掉不相关的 JSON 数据,而不是将其放在下面的 search_results 变量中?或者是否有更好的方法以“性能友好”的方式逐行解析大型 JSON 文件?
if ($decoded_line->products->product->price < 900) { //assuming a site visitor is searching for an item under $900
$search_results .= decoded_line->products->product;
}
}
通过在上面的 if 语句中过滤掉不相关的 JSON 数据,我认为当我们在此处使用 json_decode 时,这将有助于提高整体性能。
$data = json_decode($search_results);
$product = $data->products->product;
foreach($product as $Product) {
echo $Product->name . " " . $Product->price;
echo "<br>";
}
fclose($Json_file);
非常感谢您的任何建议!
最佳答案
是否可以选择将 JSON 写入本地数据库(如果尚未写入)并使用 ajax 调用和 onkeychange 事件以过滤方式返回搜索结果?
关于php - 使用 fopen()、fgets() 和 PHP 的流式 JSON 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973044/