code: @Override
      public void visit(String[] keys, int level, Map<Integer, Integer> levelToIdx, ValueJsonNode valueJsonNode) {
  
          if(level == keys.length-1)
              children.put(keys[level], valueJsonNode);
          else {
  
              JsonTreeNode child = children.get(keys[level]);
  
              // look toJson see if next item exists, otherwise, create it, add it toJson children, and visit it.
              String nextKey = keys[level+1];
  
              if(child == null) {
  
                  if (nextKey.equals("[]"))
                      child = new ArrayJsonNode();
                  else
                      child = new ObjectJsonNode();
                  children.put(keys[level], child);
              }
  
              child.visit(keys, level+1, levelToIdx, valueJsonNode);
          }
      }
docs: Sets state on current instance based on the flattened tree representation from the input.
  This will also determine the next child, if necessary, and propagate the next level of
  the tree (down to the child).
  @param keys
  @param level
  @param levelToIdx
  @param valueJsonNode