2017-02-09 4 views
0

Ich habe ein Stück Code, der wie folgt aussieht (obj ist ein web::json::value):Unterschied zwischen Web :: json :: Wert :: Parse und Web :: json :: Wert :: string in Casablanca C++ REST SDK

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

ich bin nicht in der Lage, den Unterschied zwischen den beiden, weil für jede Eingabe value_str, das ich geben, wie die Zeichenfolge "value1", nur die Erklärung innerhalb der catch Läufe zu finden.

Also meine Frage ist - was ist der genaue Unterschied zwischen ::string() und ::parse()?

Können Sie mir ein minimales Beispiel zeigen, das diesen Unterschied zeigt? Ich bin nicht in der Lage, zwischen diesen beiden Funktionen aus der Dokumentation allein zu unterscheiden.

Antwort

2

Parse nimmt einen String und bildet eine json Objekt aus ihm heraus:

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

geben Sie ein Objekt der Größe 2, ID = 1 und title = "test".

String nimmt einen String und bildet eine json String aus ihm heraus.

Das spätere Beispiel gibt eine JSON-Zeichenfolge zurück, die "id": 1,"title": "test" enthält.

Dies bedeutet im Wesentlichen, dass Sie versuchen, eine JSON-Zeichenfolge zu analysieren, die nicht als JSON-Objekt erkannt wird. Das wird der Fall sein mit dem Beispiel, das du gibst.

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

Für {"id": 1,"title": "test" } Rückkehr:

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

Beachten Sie die Größe des JSON-Objekt und die Tatsache, die JSON-String zwischen Zitat und der Größe 0 statt 4. Werfen Sie einen Blick auf die Art 3 (Objekt) und 2 String.

Für "Wert 1", die kein json ist, ist es ein String ist, haben Sie:

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

hier Beachten Sie die 2 Objekte der Größe 0, und Typ 2 (string).
Dies ist der Wert des Typs:

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

Vielen Dank für die einfache Erklärung und Beispiele! – Kajal