Преобразование значения json, которое постоянно меняется на int в c ++ - PullRequest
0 голосов
/ 24 мая 2019

Хорошо, я получил этот объект JSON от моего клиента:

{"command":"BrugerIndtastTF","brugerT":"\"10\"","brugerF":"\"20\""}

Затем мне нужно использовать значение int из "brugerT", но, как вы можете видеть, оно имеет "\" 10 \ ""вокруг него.Когда я кодирую это в JavaScript, я не понимаю эту проблему.Есть ли способ использовать только часть "brugerT", которая говорит 10?

код, где * temp только должен напечатать значение int 10:

socket_->hub_.onMessage([this](
                   uWS::WebSocket<uWS::SERVER> *ws,
                   char* message,
                   size_t length,
                   uWS::OpCode opCode
                   )
                    {

                 std::string data = std::string(message,length);                  
                std::cout << "web::Server:\t Data received: " << data << std::endl; 

                // handle manual settings

                std::cout << "Web::Server:\t Received request: manual. Redirecting message." << std::endl;

                json test1 = json::parse(data);
                auto test2 = test1.json::find("command");

                std::cout << "Web::Server:\t Test 1" << test1 << std::endl;

                std::cout << "Web::Server:\t Test 2" << *test2 << std::endl;

                if (*test2 =="BrugerIndtastTF")
                {
                        std::cout<<"Web::Server:\t BrugerIndtastTF modtaget" << std::endl;
                        auto temp= test1.json::find("brugerT");
                        auto humi= test1.json::find("brugerF");



                        std::cout << "Web::Server:\t temp: " << *temp << "humi: " << *humi << std::endl;
                }



                });

EDIT: Здесь вы можете увидеть терминал

, он должен просто сказать: temp: 10 humi: 20

1 Ответ

1 голос
/ 24 мая 2019

Вы можете попытаться получить string значение brugerT и убрать \" из строки, а затем преобразовать полученный string в int с stoi,Вы могли бы даже использовать регулярное выражение, чтобы найти целое число внутри string и позволить этой библиотеке выяснить, какой метод сопоставления является наилучшим.Регулярное выражение для этого будет выглядеть примерно так: ([0-9]+)

ps string литерал типа 6 может пригодиться при ручной фильтрации \"

#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main() {
  string inputStr(R"("\"10\"")");

  regex matchStr(R"(([0-9]+))");
  auto matchesBegin = sregex_iterator(inputStr.begin(), inputStr.end(), matchStr);
  auto matchesEnd = sregex_iterator();

  for (sregex_iterator i = matchesBegin; i != matchesEnd; ++i) {
    cout << i->str() << endl;
  }
  return 0;
}
...