code: def recurse_jdata(self, jdata, tree_widget):
      if isinstance(jdata, dict):
          items = jdata.items()
      elif isinstance(jdata, list):
          items = [(str(i), val) for i, val in enumerate(jdata)]
      else:
          raise ValueError(
              f"Expected dict or list, instead got {type(jdata)}"
          )
  
      for key, val in items:
          text_list = []
  
          if isinstance(val, dict) or isinstance(val, list):
              text_list.append(key)
              row_item = QtWidgets.QTreeWidgetItem([key])
              self.recurse_jdata(val, row_item)
          else:
              text_list.append(key)
              text_list.append(str(val))
              row_item = QtWidgets.QTreeWidgetItem([key, str(val)])
  
          tree_widget.addChild(row_item)
  
file_path: PandasGUI/pandasgui/widgets/json_viewer.py
imports: import sys
  from typing import Union, List
  from PyQt5 import QtCore, QtGui, QtWidgets
  from pandasgui.store import PandasGuiStoreItem
  from pandasgui.utility import summarize_json, traverse_tree_widget
  from pandasgui.widgets import base_widgets
label_desc: Use image node_id 3 for calling the JsonViewer obj's underlying member method code with example usage: obj.recurse_jdata(jdata, tree_widget) without return types