×
Namespaces

Variants
Actions

在Qt中如何通过QJson 解析json数据

From Nokia Developer Wiki
Jump to: navigation, search

Delete instructional text in italic

This article explains how to ... Replace the abstract text with a short paragraph (or sentence) describing what the topic covers.

Enter article metadata as described below. Note that this template can be placed anywhere in the article. Do not remove parameters that you do not use

Article Metadata
Article
Created: ()
Last edited: kiran10182 (15 Mar 2012)

Contents

介绍

本文将介绍如何在Qt中使用QJson解析json数据,首先我们先看下什么是json.

json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

基础结构

JSON建构于两种结构:
  

  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)
     
  2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

基础示例

1.JSON 表示名称 / 值对的方式 按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":    < code>{ "firstName": "Brett" } </code> 这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:   firstName=Brett   但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:   

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系.
2 表示数组 当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{ "people": [ 
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },   { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},   { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }  ]}

这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

{ "programmers": [   
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },   { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },   { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }   ],   
"authors": [   
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },   { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },   { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }   ],   
"musicians": [   
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },   { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }   ] }

QJson

QJson是一个基于Qt的开发包用来将JSON数据解析成QVariant对象,Json 数组讲被映射成QVariantList实例,其他对象映射为QVariantMap实例

代码实现

  1. 设置pro文件
LIBS     += -lqjson
  1. 引入头文件
#include <qjson/parser.h>
  1. 代码中使用 QJson::Parser
QJson::Parser parser;
bool ok;
QString query = "[{\"rid\":\"102432\", \"pid\":\"1000\", \"username\":\"dxy\"},{\"rid\":\"000\", \"pid\":\"10200\", \"username\":\"dxy2\"}]";
QVariant result = parser.parse(query.toAscii(), &ok);
if(ok)
 
{
QVariantList mylist = result.toList();
 
foreach (QVariant plugin, mylist) {
 
QVariantMap mymap = plugin.toMap();
 
qDebug() << "[" << mymap["rid"].toString() << mymap["pid"].toString() << mymap["username"].toString() << "]";
}
else
qDebug()<<"error occuring";

代码下载

File:TestQJson.zip


相关链接

Add categories below. Remove Category:Draft when the page is complete or near complete

This page was last modified on 15 March 2012, at 10:15.
269 page views in the last 30 days.
×