繁体   English   中英

在php中加载大量的json数据

[英]Load large amount of json data in php

我是初学者,对这个愚蠢的问题感到抱歉,

我有一个包含大量数据的json,我必须在php中处理这个文件。 (编辑/删除/过滤对象)。

我是怎么想的:一个包含对象列表的类和从json加载对象的函数以及另一个将它们写回来的函数。 此外,列表上的操作的其他功能。

我要问的是最好的方法是什么,因为我的想法是最简单的,比我每次点击一样:编辑,删除,过滤我必须一次又一次地重新加载loatJsonObjects(),你能给出吗?我这是一个更好的方法,每次都不会做那么多的操作? 谢谢 !

所以,我不应该真的为你写一个,但今天早上我的心情非常好。 尝试这个:

Class Json_Handler {
  private $json_object;
  public function __construct($json_data) {

    if(is_object($json_data) {
      $this->json_object = $json_data;
    }

  }

  public function edit($key, $value) {

    if(isset($this->json_data[$key])) {
     $this->json_data[$key] = $value;
     return $this;
    }
    else {
     return FALSE;
    }

  }

  public function delete($key) {
    if(isset($this->json_data[$key])) {
      unset($this->json_data[$key]);
      return $this;
    }
    else {
      return FALSE;
    }
  }

  public function filter($on = 'key', $filter == NULL) {
     $filtered_objects = array();
     switch($on) {
       case 'key':
       default:
        foreach($this->json_data as $key => $value) {
          if($key == $value) {
            $filtered_objects[] = array($key => $value);
          }
        }
        break;
        case 'value':
         foreach($this->json_data as $key => $value) {
           $filtered_objects[] = array($key => $value);
         }
        break;
     }
     return $filtered_objects;
  }

  public function get_json() {
    return json_encode($this->json_data);
  }

  public function set_json($json) {
    $this->json_data = (is_object($json) ? $json : json_encode($json));
    return $this;
  }

}

然后你可以这样使用它:

$my_json_data = json_decode([...]);
$json = new Json_Handler($my_json_data);
echo $json->edit('test', 'now i have this value')
          ->delete('test')
          ->filter('key', 'bar');
          ->set_json(json_encode($new_json)
          ->get_json();

您可以将JSON数据解码为Array并将其存储在Global Variable或Session变量中。 然后使用该会话变量进行编辑,删除,过滤操作。 我不知道这是好还是不行,但这是其中一种方法。

让我知道任何其他方式....

如果您可以将数据保存在纯PHP数据对象中并在此对象中具有“处理”例程,那么您可以减少需要对该数据重新执行的操作量。

然后可以缓存此对象,从而加速将来的数据检索。 此外,您不需要在同一数据集上重新运行这些昂贵的操作(直到缓存的项目到期)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM