如何将JSON格式化为QString转换为数组

时间:2017-03-23 14:33:59

标签: qt qstring

我使用QT 4.8和MinGW 4.8,我的JSON格式化QString看起来像:

  

{"姓名":" Adam","身体":"肥胖","眼睛": "蓝色"}

如何将此字符串转换为类似字符串:

  

array [name] = Adam

     

array [body] =胖了

  

array [0] = Adam

     

array [1] =胖...

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果你可以使用Qt 5.0+,你可以使用Qt核心的原生JSON支持。

E.g。与您的输入

QString s(R"({"name":"Adam","body":"is fat","Eyes":"blue"})"); // raw string
QJsonDocument json = QJsonDocument::fromJson(s.toUtf8());
QJsonObject obj = json.object(); // since your string is an JSON object
QString name = obj.value("name").toString(); // Adam
QString body = obj.value("body").toString(); // is fat
QString eyes = obj.value("Eyes").toString(); // blue

您还可以使用QStringList keys = obj.keys();或任何您喜欢的内容阅读所有密钥,请查看Qt文档以获取更多信息:http://doc.qt.io/qt-5/qjsondocument.html#details

答案 1 :(得分:0)

在Qt 4.8中,您可以先使用QString::remove()函数删除{}括号和引号。然后,您可以继续QString::split()功能来分隔项目。

QStringList results;
QString str = "{\"name\":\"Adam\",\"body\":\"is fat\",\"Eyes\":\"blue\"}";    
str.remove(QChar('{')); // remove the '{' character
str.remove(QChar('}')); // remove the '}' character
str.remove(QChar('\"')); // remove the '"' character
QStringList pairs = str.split(","); // separate by comma
//
for (int i = 0; i < str.count(); i++)
{
  QStringList pairItems = pairs[i].split(":");
  results.append(pairItems[1]);
} 

在这种情况下,QStringList“results”看起来像:results [0] =“Adam”,results [1] =“is fat”等等......

这是您拥有的选项之一。当然有更优雅的解决方案,但这个很简单。我希望它可以帮助你。

编辑另请注意,此解决方案无法帮助您处理一些复杂的JSON输出。在这种情况下,您应该使用一些其他选项。

答案 2 :(得分:0)

您似乎正在尝试解析JSON格式。我从其他答案中看到,您正在使用的Qt 4.8中不支持本机JSON解析,因此您应该能够使用http://www.json.org上列出的任何C库进行JSON格式解析。