code: public static boolean areOverloadedJSONExpressionLists(
              String jsontext1, String jsontext2) {
          try {
              List<AbstractExpression> list1 = fromJSONArrayString(jsontext1, null);
              List<AbstractExpression> list2 = fromJSONArrayString(jsontext2, null);
              return list1.equals(list2);
          }
          catch (JSONException je) {
              return false;
          }
      }
docs: Deserialize 2 lists of AbstractExpressions from JSON format strings
  and determine whether the expressions at each position are equal.
  The issue that must be worked around is that json format string equality
  is sensitive to the valuetype and valuesize of each expression and its
  subexpressions, but AbstractExpression.equals is not
  -- overloaded abstract expressions are equal, for example,
  two overloads of the same function or operator applied to columns
  with the same name but different types.
  These overloads are sometimes allowable in live schema updates where
  more general changes might be forbidden.
  @return true iff the two strings represent lists of the same expressions,
  allowing for value type differences