2017-11-07 15 views
1

私のC++プログラムは、JSONスピリット(デバッグ用)を複数行、右インデントなどで印刷したいと思う長い(何千もの)JSON文字列を受け取ります。例えば、JSONのスピリットを使ったプレプリント

{ 
    "abc": "def", 
    "xyz": 
    [ 
    "pqr": "ijk" 
    ] 
} 

など。私はwrite機能試してみました:

const json_spirit::Value val("...long JSON string here ..."); 
cout << json_spirit::write(val, json_spirit::pretty_print) << endl; 

をしかし、元の文字列にのみ追加のバックスラッシュを得ました。

どうすればよいですか?

+0

[writer_template.h](https://sirikata.github.io/json-spirit/writer__template_8h_source.html)ファイルの230行目で、文字列が出力されているときに関数 'add_escape_chars'が呼び出されます。私が見る限り、コードを邪魔することなく、これを防ぐ方法はありません。 – Darhuuk

+0

[writer_template.h](https://sirikata.github.io/json-spirit/writer__template_8h_source.html)の56行目を参照してください。ここで '' 'は明示的にエスケープされています。 – Darhuuk

答えて

1

元の入力文字列を戻す理由は、文字列を直接json_spirit::Valueに割り当てるためです。代わりに、json_spiritの文字列を解析する必要があります。

C++ 11のコードは、以下の予想される出力できます:

#include <json_spirit/json_spirit.h> 
#include <ostream> 
#include <string> 

int main() { 
    std::string const inputStr = 
    R"raw({ "abc": "def", "xyz": [ "pqr": "ijk" ] })raw"; 

    json_spirit::Value inputParsed; 
    json_spirit::read(inputStr, inputParsed); 

    std::cout 
    << json_spirit::write(inputParsed, json_spirit::pretty_print) << "\n"; 
} 

サイドノート:より軽量Cの全体の束++(つまり、ブーストを必要としない)JSONライブラリが場合に、そこの関心すべきです君は。私は個人的にnlohmann's jsonを使用しましたが、これは1つのヘッダーファイルしか必要としません。 RapidJSONも同様に優れた選択肢のようです。 40 + C++ JSONライブラリのベンチマークの数々はnativejson-benchmarkページにあります。

+0

@HEKTO完了、完全にオーバーホールされた回答を参照してください – Darhuuk

+0

ありがとうそれは私のために働く。私は私のコメントを削除します – HEKTO

関連する問題