code: def _get_eval_json(self):
      evaluation_dictionary = dict()
  
      for key, value in _six.iteritems(self._data):
          if (
              isinstance(value, float) or isinstance(value, int)
          ) and _math.isnan(value):
              continue
          if (
              key == "test_data"
              or key == "confusion_matrix"
              or key == "roc_curve"
          ):
              continue
          evaluation_dictionary[key] = value
  
      evaluation_dictionary["table_spec"] = {
          "column_names": [
              "path",
              "image",
              "target_label",
              "predicted_label",
          ],
          "size": len(self._data["test_data"]),
          "title": "",
          "column_types": ["string", "image", "string", "string"],
      }
  
      evaluation_dictionary["corrects_size"] = len(
          self._data["test_data"].filter_by([True], "correct")
      )
      evaluation_dictionary["incorrects_size"] = (
          evaluation_dictionary["table_spec"]["size"]
          - evaluation_dictionary["corrects_size"]
      )
  
      return str(
          _json.dumps(
              {"evaluation_spec": evaluation_dictionary},
              allow_nan=False,
          )
      )
  
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  from ...visualization import _get_client_app_path
  import turicreate
  import subprocess
  import six
  from six.moves import _thread
  import json
  import base64
  import math
label_desc: Use image node_id 2 for calling the Evaluation obj's underlying member method code with example usage: obj._get_eval_json() and returns: str