用jsoncpp解析JSON字符串

我正在尝试解析用PHP编码并通过TCP发送到C ++客户端的JSON字符串。

我的JSON字符串如下所示:

{"1":{"name":"MIKE","surname":"TAYLOR"},"2":{"name":"TOM","surname":"JERRY"}}

在C ++客户端上,我正在使用jsoncpp库:

void decode()

{

string text = {"1":{"name":"MIKE","surname":"TAYLOR"},"2":{"name":"TOM","surname":"JERRY"}};

Json::Value root;

Json::Reader reader;

bool parsingSuccessful = reader.parse( text, root );

if ( !parsingSuccessful )

{

cout << "Error parsing the string" << endl;

}

const Json::Value mynames = root["name"];

for ( int index = 0; index < mynames.size(); ++index )

{

cout << mynames[index] << endl;

}

}

问题是我没有得到任何输出,甚至没有关于解析的错误(如果有)。你能帮我了解我做错了什么吗?

回答:

您的问题是:没有 。您的文档应如下所示:

{ "people": [{"id": 1, "name":"MIKE","surname":"TAYLOR"}, {"id": 2, "name":"TOM","surname":"JERRY"} ]}

和你的代码是这样的:

void decode()

{

string text ="{ \"people\": [{\"id\": 1, \"name\":\"MIKE\",\"surname\":\"TAYLOR\"}, {\"id\": 2, \"name\":\"TOM\",\"surname\":\"JERRY\"} ]}";

Json::Value root;

Json::Reader reader;

bool parsingSuccessful = reader.parse( text, root );

if ( !parsingSuccessful )

{

cout << "Error parsing the string" << endl;

}

const Json::Value mynames = root["people"];

for ( int index = 0; index < mynames.size(); ++index )

{

cout << mynames[index] << endl;

}

}

如果您想按原样保留数据:

void decode()

{

//string text ="{ \"people\": [{\"id\": 1, \"name\":\"MIKE\",\"surname\":\"TAYLOR\"}, {\"id\": 2, \"name\":\"TOM\",\"surname\":\"JERRY\"} ]}";

string text ="{ \"1\": {\"name\":\"MIKE\",\"surname\":\"TAYLOR\"}, \"2\": {\"name\":\"TOM\",\"surname\":\"JERRY\"} }";

Json::Value root;

Json::Reader reader;

bool parsingSuccessful = reader.parse( text, root );

if ( !parsingSuccessful )

{

cout << "Error parsing the string" << endl;

}

for( Json::Value::const_iterator outer = root.begin() ; outer != root.end() ; outer++ )

{

for( Json::Value::const_iterator inner = (*outer).begin() ; inner!= (*outer).end() ; inner++ )

{

cout << inner.key() << ": " << *inner << endl;

}

}

}

使用迭代器直接遍历根对象(不要将其视为数组。

如果 Json :: Reader 不起作用,请尝试使用 Json :: CharReader

void decode()

{

string text ="{\"1\":{\"name\":\"MIKE\",\"surname\":\"TAYLOR\"},\"2\":{\"name\":\"TOM\",\"surname\":\"JERRY\"}}";

Json::CharReaderBuilder builder;

Json::CharReader * reader = builder.newCharReader();

Json::Value root;

string errors;

bool parsingSuccessful = reader->parse(text.c_str(), text.c_str() + text.size(), &root, &errors);

delete reader;

if ( !parsingSuccessful )

{

cout << text << endl;

cout << errors << endl;

}

for( Json::Value::const_iterator outer = root.begin() ; outer != root.end() ; outer++ )

{

for( Json::Value::const_iterator inner = (*outer).begin() ; inner!= (*outer).end() ; inner++ )

{

cout << inner.key() << ": " << *inner << endl;

}

}

}

以上是 用jsoncpp解析JSON字符串 的全部内容, 来源链接: utcz.com/qa/403349.html

回到顶部