2017-02-09 13 views
0

私は(objweb::json::valueである)このようなコードの部分を持っている:違い::カサブランカC++ RESTでの解析とWeb :: JSON ::値::文字列SDK

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

私はので、私は、このような文字列"value1"catch実行内部のみのステートメントとして、与える任意の入力value_strのための2つの違いを見つけることができないのです。

私の質問は正確な違いは::string()::parse()の間ですか?

この違いを示す最小限の例を教えてください。私はこれらの2つの機能をドキュメントだけで区別することはできません。

答えて

2

解析は、文字列を受け取り、そこからJSONオブジェクトを形成:

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

は、ID = 1、タイトルは= "test" を含む、あなたのサイズ2のオブジェクトを提供します。

文字列は、文字列を受け取り、そこからJSON文字列を形成しています。

後の例では、"id": 1,"title": "test"を含むjson文字列が返されます。

これは基本的に、jsonオブジェクトとして認識されないjson文字列を解析しようとしていることを意味します。それはあなたが与えている例の場合になります。

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

お知らせJSONオブジェクトのサイズやJSON文字列は、(タイプ3を見て二重引用符の間、代わりに4のサイズ0である事実:{"id": 1,"title": "test" }復帰のために

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

オブジェクト)と2文字列。 JSONではありません "値1" の場合

、それは文字列であり、あなたが持っているでしょう:2つのオブジェクトはサイズ0、および2型(文字列)である、ここで

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

お知らせ。
これはタイプの値です。

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

ありがとう、簡単な説明と例をありがとうございます! – Kajal