QVariant CTransaction::toJsonVariant(QVariantList data)
{
    if(data.isEmpty())
        return "";
    QJsonDocument jsonDocument = QJsonDocument::fromVariant(data);
    QByteArray byte_array = jsonDocument.toJson(QJsonDocument::Compact);
    QVariant json_var(byte_array);
    return json_var;
}
Example #2
0
boost::tribool form_parser::consume(json_var& variable, char input)
{//std::cout << input << "<" << state_ << "\n";
  switch (state_)
  {
  case var_start:
    if (!is_char(input))
    {
      return false;
    }
    else if(input == '\0')
    {
      return true;
    }
    else
    {
      value_ += input;
      state_ = var;
      return boost::indeterminate;
    }
  case var:
    if (input == '=')
    {
      (*var_)[value_] = json_var(json_var::string_var);
      var_ = &(*var_)[value_];
      value_.clear();
      state_ = value_start;
      return boost::indeterminate;
    }
    else if (input == '[')
    {
      state_ = property_start;
      return boost::indeterminate;
    }
    else if (input == '&')
    {
      (*var_)[value_] = json_var(true);
      value_.clear();
      state_ = var_start;
      return boost::indeterminate;
    }
    else if(input == '\0')
    {
      (*var_)[value_] = json_var(true);
      return true;
    }
    else if (!is_char(input) || is_tspecial(input))
    {
      return false;
    }
    else
    {
      value_ += input;
      return boost::indeterminate;
    }
  case property_start:
    if (is_char(input) && !is_tspecial(input))
    {
      if((*var_)[value_].get_type() != json_var::object_var)
       (*var_)[value_] = json_var(json_var::object_var);
      var_ = &(*var_)[value_];
      value_.clear();
      value_ += input;
      state_ = property;
      return boost::indeterminate;
    }
    else
    {
      return false;
    }
  case property:
    if (input == ']')
    {
      state_ = property_end;
      return boost::indeterminate;
    }
    else if (is_char(input) && !is_tspecial(input))
    {
      value_ += input;
      return boost::indeterminate;
    }
    else
    {
      return false;
    }
  case property_end:
    if (input == '=')
    {
      (*var_)[value_] = json_var(json_var::string_var);
      var_ = &(*var_)[value_];
      value_.clear();
      state_ = value_start;
      return boost::indeterminate;
    }
    else if (input == '[')
    {
      state_ = property_start;
      return boost::indeterminate;
    }
    else if (input == '&')
    {
      (*var_)[value_] = json_var("true");
      value_.clear();
      var_ = &variable;
      state_ = var_start;
      return boost::indeterminate;
    }
    else if(input == '\0')
    {
      (*var_)[value_] = json_var("true");
      return true;
    }
    else
    {
      return false;
    }
  case value_start:
    if (input == '&')
    {
      return false;
    }
    else
    {
      value_ += input;
      state_ = value;
      return boost::indeterminate;
    }
  case value:
    if (input == '&')
    {
      //std::cout << value_ << '\n';
      std::string value;
      utils::url_decode(value_, value);
      (*var_) = value;
      value_.clear();
      var_ = &variable;
      state_ = var_start;
      return boost::indeterminate;
    }
    else if (input == '\0')
    {
      //std::cout << value_ << '\n';
      std::string value;
      utils::url_decode(value_, value);
      (*var_) = value;
      return true;
    }
    else
    {
      value_ += input;
      return boost::indeterminate;
    }
  default:
    return false;
  }
}