我能够成功编译程序但无法从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;
}
答案 0 :(得分:0)
有两个问题:
下一个问题要解释得更复杂。 toplevel Value本身就是一个Object,因此调用val.get_obj()会返回包含所有数据的Object。此对象中只有一个Pair,名为“request”。调用val.get_obj()[0]将检索此对。然后,您需要从此Pair的值中获取Object。
价值val;读(s,val); //将jsonInput读取为值
const Pair&amp; pair = val.get_obj()[0]; //获取名称:值对,名为“request”
const Object&amp; obj = pair.value_.get_obj(); //获取服务,cookie ...对象
答案 1 :(得分:0)
为了简单起见,就像json_spirit一样,在纠正JSON字符串中缺少的','分隔符后,请尝试以下操作。
std::string json_input = <your valid JSON string>
json_spirit::Value value;
auto success = json_spirit::read_string(json_input, value);
if (success == true) {
auto object = value.get_obj();
for (auto entry : object) {
if (entry.name_ == "service") service = entry.value_.get_str();
else if...
.
.
}
}