0

プログラムを正常にコンパイルできましたが、jsonオブジェクトから値を取得できませんでした。私は以下のコードを貼り付けています、コードは単純です、どんな助けもありがたいです。

#include <cstdio>
#include <cstring>
#include <json_spirit.h>

using namespace std;
using namespace json_spirit;

//A sample get file request 
char *jsonInput = 
"{\"request\" : { \
                \"service\" : \"fmgr\" \
                \"cookie\"  : \"Abxruyyeziyrolsu\" \
                \"req\"     : \"read\" \
                \"fname\"   : \"Junk.txt\" \
                \"size\"    :  1024 \
                \"data\"    :  \"data\" \
}}";


int main(int argc, char **argv)
{
    Value val;
    const string s = jsonInput;
    read(s, val); //read the jsonInput to the value
    Object obj = val.get_obj();
    std::string service, cookie, req, fname, data;
    uint32_t size;

    for(Object::size_type i = 0; i != obj.size(); ++i) {   
        const Pair& pair = obj[i];
        const string& name  = pair.name_;
        const Value&  value = pair.value_;

        if( name == "service" ) service  = value.get_str();
        else if( name == "cookie") cookie  = value.get_str();
        else if( name == "req" ) req = value.get_str();
        else if( name == "fname" ) fname = value.get_str();
        else if( name == "size" ) size = value.get_int();
        else if( name == "data" ) data = value.get_str();
    }
    std::cout<<service << " " << cookie << " " << req << " " << fname << " " << size << " " << data ;
    return 0;
}
4

2 に答える 2

0

次の 2 つの問題があります。

  1. jsonInput 文字列が有効な JSON ではありません。オブジェクトのペアを区切るカンマがありません。
  2. 次の問題は、説明がより複雑です。トップレベルの値はそれ自体がオブジェクトであるため、val.get_obj() を呼び出すと、すべてのデータを含むオブジェクトが返されます。このオブジェクトには、「リクエスト」という名前のペアが 1 つだけあります。val.get_obj()[0] を呼び出すと、このペアが取得されます。次に、このペアの値からオブジェクトを取得する必要があります。

    値 val; 読み取り (秒、値); // jsonInput を値に読み取ります

    const ペア & ペア = val.get_obj()[0]; //「request」という名前の name:value ペアを取得します

    const Object& obj = pair.value_.get_obj(); // サービス、cookie... オブジェクトを取得します

于 2012-05-04T19:53:31.290 に答える