Repository: confident-ai/deepeval
Issue: `add_goldens_from_json_file` method missing parameters for several Golden/ConversationalGolden fields
Root cause: Unimplemented Feature Gap

**Describe the bug**
  The `add_goldens_from_json_file` method in `EvaluationDataset` does not provide mapping parameters for all fields available in the `Golden` and `ConversationalGolden` classes. This makes it impossible to fully populate Golden objects from JSON files containing these fields.

  **To Reproduce**
  Steps to reproduce the behavior:
  1. Create a JSON file with Golden data including fields like `comments`, `name`, or `custom_column_key_values`
  2. Use `dataset.add_goldens_from_json_file(file_path="data.json")` to load the data
  3. Check the created Golden objects
  4. The `comments`, `name`, and `custom_column_key_values` fields will be None/empty despite being present in the JSON

  **Expected behavior**
  The `add_goldens_from_json_file` method should accept optional key mapping parameters for ALL fields available in the Golden/ConversationalGolden classes, similar to how it currently handles `input_key_name`, `expected_output_key_name`,
  etc.

  Missing mapping parameters for `Golden`:
  - `comments_key_name`
  - `name_key_name`
  - `custom_column_key_values_key_name`

  Missing mapping parameters for `ConversationalGolden`:
  - `comments_key_name`
  - `name_key_name`
  - `custom_column_key_values_key_name`

**Suggested Fix**
```python
  def add_goldens_from_json_file(
      self,
      file_path: str,
      input_key_name: str = "input",
      actual_output_key_name: Optional[str] = "actual_output",
      expected_output_key_name: Optional[str] = "expected_output",
      context_key_name: Optional[str] = "context",
      retrieval_context_key_name: Optional[str] = "retrieval_context",
      tools_called_key_name: Optional[str] = "tools_called",
      expected_tools_key_name: Optional[str] = "expected_tools",
      source_file_key_name: Optional[str] = "source_file",
      additional_metadata_key_name: Optional[str] = "additional_metadata",
      comments_key_name: Optional[str] = "comments",  # NEW
      name_key_name: Optional[str] = "name",  # NEW
      custom_column_key_values_key_name: Optional[str] = "custom_column_key_values",  # NEW
      scenario_key_name: Optional[str] = "scenario",
      turns_key_name: Optional[str] = "turns",
      expected_outcome_key_name: Optional[str] = "expected_outcome",
      user_description_key_name: Optional[str] = "user_description",
      encoding_type: str = "utf-8",
  ):
      try:
          with open(file_path, "r", encoding=encoding_type) as file:
              json_list = json.load(file)
      except FileNotFoundError:
          raise FileNotFoundError(f"The file {file_path} was not found.")
      except json.JSONDecodeError:
          raise ValueError(f"The file {file_path} is not a valid JSON file.")

      for json_obj in json_list:
          if scenario_key_name in json_obj and json_obj[scenario_key_name]:
              scenario = json_obj.get(scenario_key_name)
              turns = json_obj.get(turns_key_name, [])
              expected_outcome = json_obj.get(expected_outcome_key_name)
              user_description = json_obj.get(user_description_key_name)
              context = json_obj.get(context_key_name)
              additional_metadata = json_obj.get(additional_metadata_key_name)  # NEW
              comments = json_obj.get(comments_key_name)  # NEW
              name = json_obj.get(name_key_name)  # NEW
              custom_column_key_values = json_obj.get(custom_column_key_values_key_name)  # NEW

              parsed_turns = parse_turns(turns) if turns else []

              self._multi_turn = True
              self.goldens.append(
                  ConversationalGolden(
                      scenario=scenario,
                      turns=parsed_turns,
                      expected_outcome=expected_outcome,
                      user_description=user_description,
                      context=context,
                      additional_metadata=additional_metadata,  # NEW
                      comments=comments,  # NEW
                      name=name,  # NEW
                      custom_column_key_values=custom_column_key_values,  # NEW
                  )
              )
          else:
              input = json_obj.get(input_key_name)
              actual_output = json_obj.get(actual_output_key_name)
              expected_output = json_obj.get(expected_output_key_name)
              context = json_obj.get(context_key_name)
              retrieval_context = json_obj.get(retrieval_context_key_name)
              tools_called = json_obj.get(tools_called_key_name)
              expected_tools = json_obj.get(expected_tools_key_name)
              source_file = json_obj.get(source_file_key_name)
              additional_metadata = json_obj.get(additional_metadata_key_name)
              comments = json_obj.get(comments_key_name)  # NEW
              name = json_obj.get(name_key_name)  # NEW
              custom_column_key_values = json_obj.get(custom_column_key_values_key_name)  # NEW

              self._multi_turn = False
              self.goldens.append(
                  Golden(
                      input=input,
                      actual_output=actual_output,
                      expected_output=expected_output,
                      context=context,
                      retrieval_context=retrieval_context,
                      tools_called=tools_called,
                      expected_tools=expected_tools,
                      additional_metadata=additional_metadata,
                      source_file=source_file,
                      comments=comments,  # NEW
                      name=name,  # NEW
                      custom_column_key_values=custom_column_key_values,  # NEW
                  )
              )
  ```