1,cJSON支持在C程序中创建和解析JSON数据,其提供多种方法供C程序使用,最直接的是将cJSON.c和cJSON.h加入到C工程中,源代码:https://github.com/DaveGamble/cJSON

2, QJsonObject用于在Qt中创建JSON对象

3,数据传输通过UDP运行

Qt代码如下:

首先在pro文件中加入

QT += network

h文件内容:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include<QtNetwork> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); QUdpSocket *sender;
QByteArray byteArray;
private slots:
void on_pushButton_clicked(); private:
Ui::MainWindow *ui;
}; #endif // MAINWINDOW_H

cpp文件内容:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QJsonObject>
#include<QJsonDocument>
#include<QDebug> MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); sender = new QUdpSocket(this); QJsonObject rectJson;
rectJson.insert("Type","Rectangle");
rectJson.insert("height",);
rectJson.insert("widght",); QJsonDocument rectJsonDoc;
rectJsonDoc.setObject(rectJson);
byteArray = rectJsonDoc.toJson(QJsonDocument::Compact); } MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::on_pushButton_clicked()
{ QHostAddress address;
address.setAddress(QString("192.168.230.140"));
sender->writeDatagram(byteArray.data(),byteArray.size(),
address,);
}

Qt程序通过端口4444,向IP为192.168.230.140的主机发送JSON数据

4,C程序如下:

{
int sock_fd;
char rcv_buff[];
struct sockaddr_in client_addr;
struct sockaddr_in server_addr;
int client_len;
int rcv_num = -; if ((sock_fd = socket(AF_INET, SOCK_DGRAM,)) < )
{
perror("socket create error\n");
exit();
} memset(&server_addr,,sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET;
server_addr.sin_port = htons();
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); client_len = sizeof(struct sockaddr_in); if (bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) < )
{
perror("bind socket error.\n");
exit();
} while ()
{
/*zero the buff of rvbsm and hvbsm? zhp*/ rcv_num= recvfrom(sock_fd, rcv_buff, sizeof(rcv_buff), , (struct sockaddr*)&client_addr, &client_len);
if (rcv_num>)
{
rcv_buff[rcv_num] = '\0';
printf("rx bsm num = %d\n",rcv_num);
//printf();
printf("%s %u says: %s\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),rcv_buff);
//parse_UDP_data(rcv_num,rcv_buff); if(rcv_buff != NULL)
{
cJSON* pJson = cJSON_Parse(rcv_buff);
if(pJson == NULL)
{
printf("Json Parse failed.\n");
return ;
}
cJSON* pSub1 = cJSON_GetObjectItem(pJson,"Type");
cJSON* pSub2 = cJSON_GetObjectItem(pJson,"height");
cJSON* pSub3 = cJSON_GetObjectItem(pJson,"widght");
if(pSub1!=NULL)
{
printf("Type : %s\n", pSub1->valuestring);
}
if(pSub2!=NULL)
{
printf("height : %d\n", pSub2->valueint);
}
if(pSub3!=NULL)
{
printf("widght : %d\n", pSub3->valueint);
}
} }
else
{
perror("recv BSM error\n");
break;
}
}
close(sock_fd); }

编译C程序:gcc -I. -lm -o rencode *.c

由于cJSON使用了标准数学库,所以在编译中需链接其库文件-lm;

在IP为192.168.230.140的linux服务器中执行./rencode

输出结果为:

JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据的更多相关文章

  1. QT POST/GET 发送/获取网页数据

    #include <QNetworkReply> #include <QNetworkRequest> QNetworkAccessManager *m_accessManag ...

  2. 使用 Qt 获取 UDP 数据并显示成图片

    一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...

  3. Java中使用org.json和json-lib解析JSON

    文章目录  [隐藏] 一.JavaProject中org.json解析JSON 1.JSON的org.son-api下载 1)JSON网址 2)JSON的java解析org.json-api网址 3) ...

  4. Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  5. 【转载】Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  6. 使用cJSON解析JSON

    cJSON获取数组元素的每个值 { "operType": 0x5, "field": ["time","matchRule&qu ...

  7. 使用 Qt 获取 UDP 数据并显示成图片(2)

    本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...

  8. JSON的简单使用_向前台发送JSON数据

    转自:http://www.cnblogs.com/digdeep/p/5574366.html 1.前台页面 <%@ page language="java" conten ...

  9. .net从网络接口地址获取json,然后解析成对象(一)

    整理代码,今天遇到一个问题,就是从一个场景接口获取json,然后解析成对象.之前的时候都好好的,这次返回的json字符串里,由于字符编码的问题,格式上不能转换.一直以为是解析的过程编码有误,试了utf ...

随机推荐

  1. iOS搜索框UISearchBar

    当你在seachBar中输入字母之前的时候,只是用鼠标选中searchBar的时候,如图 终端输出截图如下:(这个时候调用先shouldBeginEditing,之后调用didBeginEditing ...

  2. iOS动画特效 分类: ios技术 2015-05-15 16:29 311人阅读 评论(0) 收藏

    关于图层的几个坐标系. 对于ios来说,坐标系的(0,0)点在左上角,就是越往下,Y值越大.越往右,X值越大. 一个图层的frame,它是position,bounds,anchorPoint和tra ...

  3. BZOJ 2705 [SDOI2012]Longge的问题 ——Dirichlet积

    [题目分析] 狄利克雷卷积. 然后直接求出欧拉函数,计算和即可. [代码] #include <cstdio> #include <cstring> #include < ...

  4. 长平狐 Cocos2d-x 的“HelloWorld” 深入分析

                              Cocos2d-x 的“HelloWorld” 深入分析 本节所用Cocos2d-x版本:cocos2d-1.0.1-x-0.12.0 不能免俗,一 ...

  5. js 设置导航固定

    <div id="nav"> .... </div> function Add_Data() { var top = $("#header-nav ...

  6. php包管理工具最基本的一些问题

    windows下的 1.先安装windows下的set-up程序 点击一步步的, cmd进入,输入composer能成功显示一幅图说明安装成功 2.在下载,https://getcomposer.or ...

  7. SQL SERVER 2000 数据恢复(分离数据库+附加数据库)

    一.分离数据库     SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上.分离数据库将从SQL Server 删除数据库,所以当点击“分离数据 ...

  8. 请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库

    转载请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库 1.下载最新的JDBC(2012/3/6) http://www.microsoft.com/downloads/zh-cn/de ...

  9. Vim 第一天

    记得第一次接触vi编辑器,好像是在海尔的机房吧,那是时候还是没有毕业的小菜鸟一只(PS:现在也是菜鸟),记得是测试一个云存储的产品.看着他们用vi编辑器,当时也没有感觉有什么(现在也没感觉……),只是 ...

  10. 文本切换器(TextSwitcher)的功能和用法

    TextSwitcher继承了ViewSwitcher,因此它具有与ViewSwitcher相同的特征:可以在切换View组件的同时使用动画效果.与ImageSwitcher相似的是,使用TextSw ...