code: public final IJSONSerializable<?> fromString(String string, final ValidationContext ctx)
      {
          try
          {
              ctx.push("fromString");
  
              if (null == (string = StringOps.toTrimOrNull(string)))
              {
                  ctx.addError("NULL JSON String");
  
                  return null;
              }
              final JSONValue value = JSONParser.parseStrict(string);
  
              if (null == value)
              {
                  ctx.addError("NULL from JSONParser");
  
                  return null;
              }
              final JSONObject json = value.isObject();
  
              if (null == json)
              {
                  ctx.addError("Result is not a JSONObject");
  
                  return null;
              }
              return fromJSON(json, ctx);
          }
          catch (final ValidationException e)
          {
              return null;
          }
      }
docs: Parses the JSON string and returns the IJSONSerializable.
  Use this method if you need to parse JSON that may contain one or more errors.
  <pre>
  ValidationContext ctx = new ValidationContext();
  ctx.setValidate(true);
  ctx.setStopOnError(false); // find all errors
  IJSONSerializable<?> node = JSONDeserializer.getInstance().fromString(jsonString, ctx);
  if (ctx.getErrorCount() > 0)
  {
  Console.log(ctx.getDebugString());
  }
  </pre>
  
  @param string JSON string as produced by {@link IJSONSerializable#toJSONString()}
  @param ctx ValidationContext
  @return IJSONSerializable