2017-03-22 32 views
0

jsonc-libjsonを使用して、以下のようなjson文字列を作成しています。json libを使用してjson文字列を作成する

{ "author-details": { 
     "name" : "Joys of Programming", 
     "Number of Posts" : 10 
    } 
} 

私のコードは

json_object *jobj = json_object_new_object(); 
json_object *jStr1 = json_object_new_string("Joys of Programming"); 
json_object *jstr2 = json_object_new_int("10"); 
json_object_object_add(jobj,"name", jStr1); 
json_object_object_add(jobj,"Number of Posts", jstr2); 

の下に、これは私が著者の詳細情報に関連付けられている上部を追加するにはどうすればよいのJSON文字列

{ 
"name" : "Joys of Programming", 
    "Number of Posts" : 10 
} 

を与えるように見えますか?

答えて

0

新しいJSONオブジェクトを作成し、既に作成したオブジェクトを子として追加します。

ちょうどあなたがすでに書かれたものの後にこのようなコードを挿入:ドミニクからのコメントに基づいて

json_object* root = json_object_new_object(); 
json_object_object_add(root, "author-details", jobj); // This is the same "jobj" as original code snippet. 
+0

それは望ましい結果が得られていません。 json_object * jobj = json_object_new_object(); json_object * root = json_object_new_object(); json_object_object_add(jobj、 "著者詳細"、ルート);以前に提供したコードの前にこれを追加しました。json_object * jobj = json_object_new_object(); json_object * jStr1 = json_object_new_string( "プログラミングの楽しさ"); json_object * jstr2 = json_object_new_int(10); {"著者詳細":{}、 "名前": "プログラミングの喜び"、 "投稿数":10} – ari

+0

を印刷しました。 – ari

0

を、私は正しい答えを見つけ出すことができました。

json_object *jobj = json_object_new_object(); 
json_object* root = json_object_new_object(); 
json_object_object_add(jobj, "author-details", root); 
json_object *jStr1 = json_object_new_string("Joys of Programming"); 
json_object *jstr2 = json_object_new_int(10); 
json_object_object_add(root,"name", jStr1); 
json_object_object_add(root,"Number of Posts", jstr2); 
1

古い広告を言い換えると、「libjsonユーザーは、スイッチよりもむしろ戦うだろう」

少なくとも、私はあなたがライブラリとの戦いをしなければならないと思われます。 nlohmann's JSON libraryを使用して、あなたはこのようなコードを使用することができます。

nlohmann::json j { 
    { "author-details", { 
      { "name", "Joys of Programming" }, 
      { "Number of Posts", 10 } 
     } 
    } 
}; 

少なくとも私には、これは多少、よりシンプルで読みやすいようです。

解析はほぼ同じです。たとえば、上記のJSONデータを含むsomefile.jsonという名前のファイルがあるとします。

nlohmann::json j; 

std::ifstream in("somefile.json"); 

in >> j; // Read the file and parse it into a json object 

// Let's start by retrieving and printing the name. 
std::cout << j["author-details"]["name"]; 

をそれとも、我々はポストを発見したと仮定しましょう、私たちはポストのカウントをインクリメントしたい:それを読み、解析するために、我々はこのような何かを行うことができます。これはものが得る1つの場所です...味わいが少ない - 私たちが望むように直接値を増やすことはできません。我々は(のような私たちは++に欠け、より少ない言語になります)値を取得する必要があり、1を追加し、その結果を割り当てます。

j["author-details"]["Number of Posts"] = j["author-details"]["Number of Posts"] + 1; 

その後、我々は結果を書きたいです。我々はそれが「密」(例えば、我々はいくつかの他のマシンがそれを読むためには、ネットワークを介して送信するつもりだ)したい場合は、私たちはただ<<を使用することができます。

一方
somestream << j; 

、私たちがすることがありますそれは人がそれをより簡単に読むことができるようにそれをきれいに印刷します。ライブラリはとても4列のタブストップでそれがインデントプリントアウト持って、私たちが行うことができ、我々はsetwで設定幅を尊重:

somestream << std::setw(4) << j; 
+1

nlohmannのライブラリを使用する動作をもう一度行います。私はあまりにも多くのトラブルや成功なしにそれを前に使用しました。 – mgarey

+0

nlohmannのJSONをお薦めいただきありがとうございます。私はそれを試してみる。もし誰かがnlohmanのjsonライブラリを使って上記のようなjsonデータ/オブジェクトを解析する方法のスニペットをスローすることができれば、始めることができます。 – ari

関連する問題