【问题标题】:How to convert from QString to JSON in C++ side如何在 C++ 端从 QString 转换为 JSON
【发布时间】:2022-12-20 17:54:02
【问题描述】:

在qml中,

templist:
[{"product_code":"111111111","product_name":"AAAA"},
{"product_code":"222222222","product_name":"BBBB"},
{"product_code":"33333333","product_name":"CCCC"}]

在 qml 端的以下代码的帮助下,上面的模板列表作为 Qstring 发送到 c++ 端,

function listToString() {
    var data = []
    for (var i = 0; i < templist.count; ++i) {
        data.push(templist.get(i))
    }
    var keysList = JSON.stringify(data)
    console.log(keysList)
    **Option A:**  backend.request_add(keysList)
    **Option B:**  backend.request_add(data)
}

在 C++ 方面,

Option A: keysList as multidata
Option B: data as multidata

我把上面的输入转换成

QByteArray br = multidata.toUtf8();

选项A

br = 
[{\"product_code\":\"111111111\",\"product_name\":\"AAAA\"},
{\"product_code\":\"222222222\",\"product_name\":\"BBBB\"},
{\"product_code\":\"33333333\",\"product_name\":\"CCCC\"}]

选项B

br = "QObject(0x560034863a60),QObject(0x5600348628b0),QObject(0x7f76000074d0)"

题:在选项 A 中,我已将密钥对转换为 json 格式,然后将其作为 qstring 发送到 C++ 端。 有没有办法直接从此输出中从选项 B 获取密钥对

br = "QObject(0x560034863a60),QObject(0x5600348628b0),QObject(0x7f76000074d0)"

如果我在 qml 端本身进行转换,我会得到选项 A 中列出的所需答案

br = [{"product_code":"111111111","product_name":"AAAA"},
{"product_code":"222222222","product_name":"BBBB"},
{"product_code":"33333333","product_name":"CCCC"}]

我正在尝试使用选项 B 实现相同的期望输出。请指出正确的方向

【问题讨论】:

标签: qt qml qjson qjsonobject


【解决方案1】:

B选项永远行不通。您将对象实例转换为字符串化版本。这基本上是类型 (QObject) 及其地址 (0x560034863a60)。

您必须使用 JSON.stringify(data) 对 JSON 数据进行字符串化,以便能够将数据作为 JSON 字符串传输到 C++ 端。

无论如何,选项 B 的优势是什么?

【讨论】:

  • 可以从 C++ 中的这个地址从 QObject(0x560034863a60) 读取数据吗?
  • 不,您可以做的是忘记 JSON 通信并注册一个 C++ 类来直接存储您的数据。
  • 效率低下,禁止通过JavaScript 值通过stringC++QVariantQVariantMap是Qt提供的,更容易获得JavaScript 值作为QVariantC++
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2021-11-17
  • 2020-04-20
相关资源
最近更新 更多