【问题标题】:How convert JSON formated QString to an array如何将 JSON 格式的 QString 转换为数组
【发布时间】:2017-03-23 14:33:59
【问题描述】:

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

{"name":"Adam","body":"很胖","Eyes":"blue"}

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

数组[名称] = 亚当

array[body] = 很胖

数组[0] = 亚当

array[1] = 很胖...

谢谢你帮助我。

【问题讨论】:

  • 是 JSON 字符串吗?
  • 不能升级到 Qt 5.0 吗?它具有本机 JSON 支持,这使得它非常容易,如果没有的话,可以使用一些外部 c++ JSON 库来解析输入。当然你可以自己解析字符串,但是为什么...

标签: qt qstring


【解决方案1】:

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

例如用你的意见

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在 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 输出。在这种情况下,您应该使用建议的其他一些选项。

      【讨论】:

      • 这个解决方案让我很满意。感谢您的帮助。
      • 另一个类似的解决方案是将QString::split 与正则表达式一起使用。在这种情况下,它将只有一个命令。
      • 此解决方案不包括嵌套对象。我更喜欢使用一些 3rd 方 C 库进行 JSON 解析。请参阅json.org 上的列表
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2019-05-19
      • 1970-01-01
      • 2011-07-03
      相关资源
      最近更新 更多