code: func (bj BinaryJSON) Modify(pathExprList []PathExpression, values []BinaryJSON, mt ModifyType) (retj BinaryJSON, err error) {
  	if len(pathExprList) != len(values) {
  		// TODO: should return 1582(42000)
  		return retj, errors.New("Incorrect parameter count")
  	}
  	for _, pathExpr := range pathExprList {
  		if pathExpr.flags.containsAnyAsterisk() {
  			// TODO: should return 3149(42000)
  			return retj, errors.New("Invalid path expression")
  		}
  	}
  	for i := 0; i < len(pathExprList); i++ {
  		pathExpr, value := pathExprList[i], values[i]
  		modifier := &binaryModifier{bj: bj}
  		switch mt {
  		case ModifyInsert:
  			bj = modifier.insert(pathExpr, value)
  		case ModifyReplace:
  			bj = modifier.replace(pathExpr, value)
  		case ModifySet:
  			bj = modifier.set(pathExpr, value)
  		}
  	}
  	return bj, nil
  }
docs: // Modify modifies a JSON object by insert, replace or set.
  // All path expressions cannot contain * or ** wildcard.
  // If any error occurs, the input won't be changed.