gpt4 book ai didi

c++ - 使用 jsoncpp 解析 JSON 字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:47 28 4
gpt4 key购买 nike

我正在尝试解析用 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;
}
}

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

最佳答案

您的问题是:没有root["name"]。你的文件应该是这样的:

{ "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;
}
}
}

关于c++ - 使用 jsoncpp 解析 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47283908/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com