ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qml之Json序列化与反序列化

2021-07-18 22:04:12  阅读:319  来源: 互联网

标签:addr symbol jsonData Json Qml var 序列化 data name


Json

{     "data": [         {             "addr""testAddr1",             "name""testName1",             "symbol""testSymbol1"         },         {             "addr""测试测试",             "name""测试无BUG",             "symbol""测试通过"         },         {             "addr""nice",             "name""今天不送测",             "symbol""有需求明年再说"         },         {             "addr""happy",             "name""今晚上线",             "symbol""version meeting"         }     ] }

解析后

qml: addr: testAddr1 name: testName1 symbol: testSymbol1

qml: addr: 测试测试 name: 测试无BUG symbol: 测试通过

qml: addr: nice name: 今天不送测 symbol: 有需求明年再说

qml: addr: happy name: 今晚上线 symbol: version meeting

 

qml可以绘制界面,展示视图信息。在大数据、批量数据的情况下,信号与槽机制就显得不太灵活了。

就可以Json作为一种通信方式,完成数据的交互与储存。

在视图模型中:ListView、TableView等。运用较为广泛,qml却没有现成的JSON库提供序列化和反序列的操作。

此文档,就是提供出一个思路:在QML中如何构造Json,如何解析Json。

 

必备:

1、需要明白Json的组成元素和规则。(请自行百度)

2、需要明白从Json到string字符串添加了什么东西?两者的区别是什么?

3、QML中提供的JSON的解析规则是怎样的?

比如:

{

"data": {

"data1":"test1",

"data2":"test2"

}

}

将上述的Json序列化到stringData

解析方式一:全解析

var jsonData=JSON.parse(stringData);

使用:

var data=jsonData.data;

var data1=jsonData.data.data1

var data2=jsonData.data.data2

 

解析方式二:部分解析

var jsonData=JSON.parse(stringData).data;

使用:

var data1=jsonData.data1

var data2=jsonData.data2

 

解析方式三:具体解析

var data1=JSON.parse(stringData).data.data1;

var data2=JSON.parse(stringData).data.data2;

 

区别:

1、qml提供出解析层级。即可以解析到某一个字段,并拿到里面的数据。

2、解析方式。qml的解析方式、字段读取,都是使用"."。对比其他Json库,----jsonData["data"]、jsonData["data"]["data1"]。

3、安全性。qml的Json解析是弱解析。意味着即使Json格式出错了、字段不存在等情况都不会崩溃,仅是警告处理。因此需要确保Json的正确性。

 

 

下面给出一个简单的ListView作为参考Demo

    function jsonToString(model) {         var res = "{ \"data\": [\n";         console.log("count: " + model.count);         for(var i = 0; i < model.count; ++i) {             res += "\n{\t";             var e = model.get(i);             res += "\"addr\": \""   + e.addr + "\",\n\t";             res += "\"name\": \"" + e.name + "\",\n\t";             res += "\"symbol\": \"" + e.symbol +"\"\n\t";               // The last one should not have the ending ","             if ( i === model.count -1)                 res += "\n}";             else                 res += "\n},";         }         res += "\n]}";         console.log("res: " + res );         return res;     }       function stringToJson(stringData){         console.log("req stringData:",stringData);         var jsonData=JSON.parse(stringData).data;         //for(var i=0;i<jsonData.length;++i){         //    console.log("addr:",jsonData[i].addr,         //                " name:",jsonData[i].name,         //                " symbol:",jsonData[i].symbol);         //}         return jsonData;     }       ListModel {         id: listModel         ListElement {             addr:"testAddr1"             name:"testName1"             symbol:"testSymbol1"         }         ListElement {             addr:"测试测试"             name:"测试无BUG"             symbol:"测试通过"         }         ListElement {             addr:"nice"             name:"今天不送测"             symbol:"有需求明年再说"         }         ListElement {             addr:"happy"             name:"今晚上线"             symbol:"version meeting"         }     }       ListView{         id: listview         width:256         height: 180         x:100         y:100         model: listModel         //delegate: listDelegate     }     //--------------------------------------------------------------------------------------------------------- //test         Rectangle{             x:50             y:50             width:200             height:30             border.width: 1             Text {                 text: qsTr("序列化")                 anchors.centerIn: parent             }             MouseArea{                 anchors.fill: parent                 onClicked: {                     var data=jsonToString(listModel)                     console.log(data);                 }             }         }           Rectangle{             x:300             y:50             width:200             height:30             border.width: 1             Text {                 text: qsTr("反序列化")                 anchors.centerIn: parent             }             MouseArea{                 anchors.fill: parent                 onClicked: {                     var data=jsonToString(listModel)                     var jsonData=stringToJson(data)                     console.log(jsonData);                     for(var i=0;i<jsonData.length;++i){                         console.log("addr:",jsonData[i].addr,                                     " name:",jsonData[i].name,                                     " symbol:",jsonData[i].symbol);                     }                 }             }         } //test

 

标签:addr,symbol,jsonData,Json,Qml,var,序列化,data,name
来源: https://www.cnblogs.com/gd-luojialin/p/15027879.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有