2017-08-14 24 views
-3

JSON、C++、C++ REST SDKの新機能ですので、今は2つのベクターからJSONオブジェクトを作成するのに苦労しています。 は、私が今持っているもの:ディメンション・データを含む2つのベクトルC++で2つのベクトルからJSONオブジェクトを作成する方法は?

std::vector<glm::vec3> bookDimension{ 
    glm::vec3(x1,  y1, z1), // element in vector are float type 
    glm::vec3(x2,  y2, z2), // element in vector are float type 
    glm::vec3(x3,  y3, z3), // element in vector are float type 
}; 
std::vector<glm::vec3> containerDimension{ 
    glm::vec3(x4,  y4, z4), // element in vector are float type 
}; 

が、私はこれらの2つのベクトルを使用して、単一のJSONオブジェクトを作成したい、JSONオブジェクトの構造は、うまくいけば、この

{"b":[ 
    [x1,y1,z1],[x2,y2,z2],[x3,y3,z3] 
    ], 
"c":[[x4,y4,z4] 
    ] 
} 

のようなものです私は正しいobjをどのように初期化するかについてはわかりません。以下は、私がこれまで

json::value jsonObj; 
std::vector<glm::vec3>::const_iterator it = bookDimension.begin(), end = boxDimension.end(); 
for (; it != end; ++it) { 
    (jsonObj["b"][it][0]) = it->x; 
    jsonObj["b"][it][1] = it->y; 
    jsonObj["b"][it][2] = it->z; 
} 

達することができるものであり、エラーは(「のラインXXXXで宣言 ウェブ:: JSON ::値::演算子[](constのはstd ::文字列&キー)..です\ json.h ")がアクセス可能になっています

ヘルプ/ヒントを事前に評価してください!どうもありがとうございました!

+0

ができ、間違っています。唯一の問題は潜在的な余分なカンマです。これは、ガード条件を修正するか、ベクトル処理が完了したときに文字列を編集することができます。これまでに何を試しましたか? –

+0

ええ、私はあなたが示唆していることをしようとしていましたが、JSONの初期化については混乱しています。 JSON配列を使うべきですか?または単にJSON値ですか?今私が理解しているのは、json :: array jsonVector()のようなパラメータを作ることです。自動反復して値jsonVector ["b"] [it] [0] = it-> xを割り当てます。 jsonVector ["b"] [it] [1] = it-> y; –

+2

質問を編集してみてください。<あなたがちょうどコメントしたもの>を試しましたが、うまくいきませんでした。このエラーはです。コードはコメントで読むのが本当に難しいです。また、私はjson :: arrayについて聞いたことがありません。いくつかのライブラリであれば、あなたの質問にも言及したいかもしれません。 –

答えて

0

"the wiki"のコードに基づいて、マイクロソフトのc++ rest sdkを使用していると推測しています。そのような場合、それはあなたが要素の数は(などvec3Obj[L"x"]=bookOrContainerDimension[i].x)の変化を文句を言わないので、vec3表現のためのオブジェクトを使用したいかもしれませんが

json::value finalObject; 
json::value bookDimJsonArray; 
for(unsigned int i=0;i<bookDimension.size();i++){ 
    json::value vec3Array; 
    vec3Array[0]=bookDimension[i].x; 
    vec3Array[1]=bookDimension[i].y; 
    vec3Array[2]=bookDimension[i].z; 
    bookDimJsonArray[i]=vec3Array; 
} 
json::value containerDimJsonArray; 
for(unsigned int i=0;i<containerDimension.size();i++){ 
    json::value vec3Array; 
    vec3Array[0]=containerDimension[i].x; 
    vec3Array[1]=containerDimension[i].y; 
    vec3Array[2]=containerDimension[i].z; 
    containerDimJsonArray[i]=vec3Array; 
} 
finalObject[L"b"]=bookDimJsonArray; 
finalObject[L"c"]=containerDimJsonArray; 

ような何かをするために動作するはず

アイムL"string"構文はMicrosoftの拡張機能だから、私の推測では間違いないと思いますが、次回はあなたが使っているライブラリを投稿してください。

は、包みなさい私はあなたが常にただ単にベクトルを反復して文字列に各項目を追加し、必要に応じてカンマを追加し、文字列に自分自身を追加文字列を使用して+=

+0

リフレッシュについてのあなたのコメントを見る前に自分の答えを書きましたが、正しく推測されたようです。 –

+0

問題を解決するために感謝してくれてありがとう。はい、あなたの推測は正しいです。私は質問を更新し、今、それをもっと明確にしようとしました。質問を投稿するのは初めてのことですが、まだたくさんのことを学ぶ必要があります。 –

+0

確かに、次回に質問があることがわかります。がんばろう! –

関連する問題