input: 
  def create_basic_blockchain(initial_data):
      """ Function to compose a basic blockchain system in Python. This will include 
      functions to create blocks, add blocks to the chain, and retrieve the entire 
      blockchain in JSON format.
      
      >>> create_basic_blockchain({'timestamp': '2023-05-01', 'data': 'Genesis Block'})
      '[{
        "index": 0,
        "timestamp": "2023-05-01",
        "data": "Genesis Block",
        "previous_hash": null,
        "hash": "68e4b287e7e3f45a8b8dc34c4dfaaafe08b89f9bbe15ea5a9f13db80f513e55a"
      }]'
      
      >>> blockchain = create_basic_blockchain({'timestamp': '2023-05-01', 'data': 'First Block'})
      >>> blockchain.add_block({'timestamp': '2023-05-02', 'data': 'Second Block'})
      >>> blockchain.get_chain()
      '[{
        "index": 0,
        "timestamp": "2023-05-01",
        "data": "First Block",
        "previous_hash": null,
        "hash": "e48b01f688dccd96d42f2bb4c9467ca4e0f9f6d1ba3cfd1762c9f6f773bf1a08"
      }, {
        "index": 1,
        "timestamp": "2023-05-02",
        "data": "Second Block",
        "previous_hash": "e48b01f688dccd96d42f2bb4c9467ca4e0f9f6d1ba3cfd1762c9f6f773bf1a08",
        "hash": "1e1c5ebb9194e26f9ca452a3ac905f2a60dd2cbb8fc515b6d7baf80bc4caa89c"
      }]'
      """
  
output:     
      class Block:
          def __init__(self, index, timestamp, data, previous_hash):
              self.index = index
              self.timestamp = timestamp
              self.data = data
              self.previous_hash = previous_hash
              self.hash = self.calculate_hash()
          
          def calculate_hash(self):
              block_string = f"{self.index}{self.timestamp}{self.data}{self.previous_hash}"
              return hashlib.sha256(block_string.encode()).hexdigest()
  
      class Blockchain:
          def __init__(self, initial_data):
              self.chain = []
              self.create_genesis_block(initial_data)
          
          def create_genesis_block(self, initial_data):
              genesis_block = Block(0, initial_data['timestamp'], initial_data['data'], "0")
              self.chain.append(genesis_block)
          
          def add_block(self, block_data):
              previous_block = self.chain[-1]
              new_block = Block(len(self.chain), block_data['timestamp'], block_data['data'], previous_block.hash)
              self.chain.append(new_block)
          
          def get_chain(self):
              return json.dumps([block.__dict__ for block in self.chain], indent=2)
  
      import hashlib
      import json
  
      return Blockchain(initial_data)
  