user11412912
user11412912

Reputation:

Converting a json value that keeps changing to int in c++

Okay so i get this JSON object from my client:

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

Then i need to use the int value from "brugerT", but as you can see it has "\"10\"" around it. When i code this in javascript i dont get this problem. Is there a way to only use the part of "brugerT" that says 10?

the code where *temp only should print the int value 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: Here you can see the terminal

it should just say: temp: 10 humi: 20

Upvotes: 0

Views: 276

Answers (1)

Tarick Welling
Tarick Welling

Reputation: 3255

You can try to get the string value of brugerT and strip the \" out of the string and then convert the resulting string into a int with stoi. You could even use a regular expression to find the integer inside the string and let that library figure out what is the best matching method. A regular expression for that would be something like: ([0-9]+)

ps string literal type 6 might be of some use when manually filtering out \"

#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;
}

Upvotes: 1

Related Questions