2017-02-09 3 views
0

У меня есть кусок кода, который выглядит следующим образом (obj является web::json::value):Разница между веб :: JSon :: :: значение синтаксического анализа и веб :: :: JSON значение :: строка в Касабланке C++ REST SDK

try { 
    obj[key_str] = web::json::value::parse(value_str); 
} 
catch (...) { 
    obj[key_str] = web::json::value::string(value_str); 
} 

Я не могу найти разницу между этими двумя, потому что для любого входа value_str, что я даю, такие как строка "value1", только заявление внутри catch прогонов.

Так что мой вопрос: что такое точная разница между ::string() и ::parse()?

Не могли бы вы показать мне минимальный пример, демонстрирующий эту разницу? Я не могу различать эти две функции только из документации.

ответ

2

синтаксический анализ принимает строку и формирует объект JSon из него:

{"id": 1,"title": "test" } 

Даст вам объект размера 2, содержащий идентификатор = 1, и название = "тест".

строка принимает строку и формирует JSon строку а из него.

В следующем примере вернется строка json, содержащая "id": 1,"title": "test".

Это в основном означает, что вы пытаетесь проанализировать строку json, которая не распознается как объект json. Это будет в случае с примером, который вы даете.

parse(const std::string& s) { 
    std::cout << json.parse(s) << std::endl; 
    std::cout << json.parse(s).size() << std::endl; 
    std::cout << json.parse(s).type() << std::endl; 
    std::cout << json.string(s) << std::endl; 
    std::cout << json.string(s).size() << std::endl; 
    std::cout << json.string(s).type() << std::endl;    
} 

Для {"id": 1,"title": "test" } возврата:

{"body":"body test","id":1,"title":"test","userId":1} 
4 
3 
"{\"userId\":1, \"id\": 1,\"title\": \"test\",\"body\": \"body test\"}" 
0 
2 

Обратите внимание на размер объекта JSon и тот факт, строка JSON между цитаты и размером 0 вместо 4. Посмотрите на тип 3 (объект) и 2 строки.

Для "значение 1", которая не является JSON, это строка, вы будете иметь:

"value 1" 
0 
"\"value 1\"" 
0 

Обратите внимание, здесь 2 объекты имеют размер 0, и тип 2 (строка).
Это значение типа:

enum value_type 
     { 
      /// Number value 
      Number, 
      /// Boolean value 
      Boolean, 
      /// String value 
      String, 
      /// Object value 
      Object, 
      /// Array value 
      Array, 
      /// Null value 
      Null 
     }; 
+0

Спасибо за простое объяснение и примеры! – Kajal

 Смежные вопросы

  • Нет связанных вопросов^_^