input: from typing import List, Dict
  
  def create_blockchain(data_list: List[Dict[str, str]]) -> str:
      """
      Creates a basic blockchain system using the provided data.
      Each block contains an index, a timestamp, data, and a previous hash.
      The function returns the entire blockchain in JSON format.
      
      >>> create_blockchain([{'timestamp': '2023-01-01 12:00:00', 'data': 'Genesis Block'}])
      '[{"index": 0, "timestamp": "2023-01-01 12:00:00", "data": "Genesis Block", "previous_hash": null, "hash": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3"}]'
      >>> create_blockchain([{'timestamp': '2023-01-01 12:00:00', 'data': 'Genesis Block'}, {'timestamp': '2023-01-01 12:05:00', 'data': 'First Block'}])
      '[{"index": 0, "timestamp": "2023-01-01 12:00:00", "data": "Genesis Block", "previous_hash": null, "hash": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3"}, \
      {"index": 1, "timestamp": "2023-01-01 12:05:00", "data": "First Block", "previous_hash": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3", "hash": "b20c0f7e433eafda965b6f005f3e5fc53115d0420599761747c22877eed2fd99"}]'
      """
output:     import hashlib
      import json
  
      def calculate_hash(index, timestamp, data, previous_hash):
          block_string = f"{index}{timestamp}{data}{previous_hash}".encode()
          return hashlib.sha256(block_string).hexdigest()
  
      blockchain = []
      previous_hash = None
  
      for index, data_dict in enumerate(data_list):
          block = {
              "index": index,
              "timestamp": data_dict['timestamp'],
              "data": data_dict['data'],
              "previous_hash": previous_hash,
              "hash": calculate_hash(index, data_dict['timestamp'], data_dict['data'], previous_hash)
          }
          previous_hash = block['hash']
          blockchain.append(block)
  
      return json.dumps(blockchain)