Как сравнить значение в JSON на основе ключа C

#c #json #casablanca

#c #json #касабланка

Вопрос:

 web::json::value obj;

obj[JSONKeyRequest] = web::json::value::string(JSONValueRequest);
  

Я создаю значение JSON и вставляю в него некоторый ключ и значения.
Затем я получаю этот объект в другой функции, пытаясь проверить, равен ли obj[JSONKeyRequest] «abc», но это не работает:

 web::json::value getObj = this->GetSendObj();
if (getObj[JSONKeyRequest] == web::json::value::string(L"abc"))
{
}
  

Однако VC продолжает показывать: «Ошибки: никакие операторы [] не соответствуют этим операндам, типы операндов являются постоянными web::json::value[std::wstring]
Итак, как я могу получить значение на основе ключа и сравнить значение со строкой?

Ответ №1:

Прежде всего, ошибка сообщает вам, какими именно должны быть аргументы.

для json требуются аргументы wstring, или, если не wstring, вы можете вводить литералы.

 obj[L"JSONKeyRequest"] = web::json::value(L"JSONValueRequest");
  

должно сработать.

Во-вторых, для сравнения попробуйте сначала объявить wstring, а затем сравнить, как

 wstring temp = "abc";
if (getObj["JSONKeyRequest"] == temp)
{
}
  

Это должно сработать.

Комментарии:

1. JSONKeyRequest — это макрос, определяющий строку. Ошибка возникает при getObj[JSONKeyRequest] , это указывает на то, что ошибка возникает с первой фигурной скобкой [ , а не потому, что в правой части знака равенства.

Ответ №2:

 if (getObj.at(key) == web::json::value::string(L"abc"))
  

Это работает для меня.