Linux C中对json格式数组数据的生成与解析

news2024/11/28 6:51:54

在网络通信中,数据经常被做成json格式的来进行传输。那么我们怎么在linux系统中去做json格式的数据呢?怎么将接收到的json格式的数据解析出来呢?

1、linux json库的安装

(1)下载json-c源码包

(2)解压json-c的源码包

Tar -xvf json-c-0.10.tar.gz

(3)配置成X86平台json包

./configure --prefix=/usr

(4)编译

Make

(5)安装

Sudo make install

2、json库中常用的函数接口

----------------生成json格式的数据常用函数接口-----------------

(1)创建一个空的json对象

Struct json_object *obj = json_object_new_object();

(2)以key-value的形式添加json对象的成员

Value值是int类型:key值是“temp”,value值是20

json_object_object_add(obj,temp”,json_object_new_int(20));

Value值是string类型:key值是“name”,value值是”mm”

json_object_object_add(obj,name”,json_object_new_string(“mm”));

(3)将json对象内容,转成json格式的字符串

Unsigned char *json_string = json_object_to_json_string(obj);

--------------解析json格式的数据常用函数接口------------------

(1)将json格式的字符串转成json对象

Struct json_object new_obj = json_tokener_parse(json_string);

(2)根据指定对象的成员名,获取这个成员对象的json对象

Struct json_object *object = json_object_object_get(new_object);

(3)根据key值取得相应的value值

Value值为int:

Json_object_get_int(object);

Value值为string:

Json_object_get_string(object);

3、对于比较简单的json格式的数据,我们用到上面的函数接口就可以完成json格式数据的制作和解析。

4、假如碰到比较复杂的json数组格式的数据,我们又该怎么去制作和解析呢?

示例说明:{

"jporder":

[

{ "jdevice": 1, "jppaynum": 1 },

{ "jdevice": 2, "jppaynum": 2 }

]

}

分析该数据的组成:

1、key值为”jporder”,与其相对应的value值是一个数组[ { "jdevice": 1, "jppaynum": 1 }, { "jdevice": 2, "jppaynum": 2 } ]

2、数组的每个成员都是两对json对象

数组成员1:{ "jdevice": 1, "jppaynum": 1 }

数组成员2:{ "jdevice": 2, "jppaynum": 2 }

3、每个json对象都是由key_value组成

具体的数据生成和解析方法如下:

数据生成部分:

数据解析部分:

运行结果如下:

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 内存淘汰和过期删除策略

提起使用Redis的优点,大家可以列举出许多,比如:数据存储在内存,读写速度快,性能优异。比如数据持久化,便于数据备份及恢复等等。 分布式服务系统平台发展至今,Redis活跃在平台的各个领域&#…

如何写单元测试

单元测试理论知识 什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。通常而言,一个单元可能是单个程序、类、对象、方法等。 为什么需要单元测试 为什么要做单元测试&#xf…

Linux学习-63-源码包服务管理方法

14.5 源码包服务管理(启动与自启动) 14.5.1 源码包服务的启动管理 源码包服务中所有的文件都会安装到指定目录当中,并且没有任何垃圾文件产生(Linux 的特性),所以服务的管理脚本程序也会安装到指定目录中…

[东华杯2021] ezgadget

复现环境配置: 链接:https://pan.baidu.com/s/1t5-fV7SUETDEI5-qbZZQrw 提取码:8do5运行 java -jar ezgadget.jar访问127.0.0.1:8888就可以了 分析: ToStringBean.java package com.ezgame.ctf.tools;import java.io.Seriali…

Nevrona Rave Reports基于报表库

Nevrona Rave Reports基于报表库 Rave Reports被描述为一套复杂的Delphi和CBuilder组件,它能够实现强大的进化过程,并为用户和开发人员提供灵活的数据库覆盖。Rave可视报表设计器基本上是一个基于组件的系统,它是专门为覆盖范围而编写的。与传…

Discourse 为什不建议使用 Gmail 的 SMTP

最开始我们也用了 Gmail 的 SMTP 服务。 这里有个问题是 Gmail 的日发送邮件限制,很多人可能认为 Gmail 是没有日常发送邮件限制的,通常不是这样的,因为如果你是手工回复和发送邮件的话,这个限制还是很难达到的。 如果是计算机或…

docker镜像如何下载到本地

Docker save 命令 | 菜鸟教程 查看镜像 docker images 保存到本地 docker save 999c20aee5da > /home/artipub.tar 999c20aee5da为镜像ID docker save : 将指定镜像保存成 tar 归档文件。 语法 docker save [OPTIONS] IMAGE [IMAGE...] OPTIONS 说明: -o :…

Xlua在unity中使用luaide打断点

本功能可以让你使用同一个编辑器实现对c#和lua打断点 编辑器:vscode 注:这是luaide的付费版才能使用断点的功能,请尊重原作者的辛苦付出! 如有需要请访问官方进行操作,官方链接如下: ShowDoc一个非常适合IT团队的在…

UDS知识整理(六):通讯控制——0x28服务

目录 一、0x28服务(通讯控制)简介 二、0x28服务信息格式 (1)请求格式 (2)正响应格式 (3)负响应格式 三、0x28服务举例 (1)打开接收与发送通讯功能 一、…

如何设计分布式系统-分布式事务-TCC?

如何设计分布式系统-分布式事务-2PC、3PC?_技术分子的博客-CSDN博客 TCC 事务模型的思想类似 2PC 提交,下面对比 TCC 和基于 2PC 事务 XA 规范对比。 第一阶段 TCC 中锁定资源。 第二阶段 TCC根据锁定资源情况进行确认和取消操作。 区别 2PC/XA 是数…

【STL常用容器】:string 容器

文章目录前言一、string容器的基本概念二、字符串的创建构造三、string 赋值操作四、string 字符串拼接五、string 查找和替换六、string字符串比较七、string 字符的存取八、string的插入和删除九、string 子串例:取出邮箱中的用户名前言 时不可以苟遇,…

【JavaScript闭包】JavaScript何为闭包,浅谈闭包的形成和意义

谈到js,必然逃不了闭包。 闭包到底是啥呢?我查了不少资料,解释真的是各种各样,千奇百怪,令人困惑。 我们先来看看一下各种解释 红宝石书:闭包指的是那些引用了另一个函数作用域中变量的函数。mdn : 闭包&a…

英语不好,能不能学会编程?

编程的人都会问: 我英文差能学会编程吗?? 学会编程不须要多浅近的英语水平,想要学会编程,简略的英语水平足够了。当初的程序开发环境又很敌对,基本上关上之后不须要怎么配置,间接写代码就行&a…

Assignment写作摘要方面包含哪些内容?

英文Assignment摘要需要包含问题陈述、动机、方法、结果和结论五个要素。本文小编针对每个要素给出一些常用的句型,以供大家参考使用。 Assignment英文摘要五要素常用句型整理 1、问题陈述(problem statement)常用句型 陈述要解决的问题详解,这个问题又哪…

【JSP】EL表达式

EL表达式EL表达式干什么用的?EL表达式的使用面试题如何输出对象属性值?域中取数据注意事项EL表达式的空处理如何从Map集合中取数据如何从数组或者List集合中获取数据局部忽略EL表达式EL表达式的内置对象EL表达式的运算符EL表达式干什么用的? …

手把手教你写一个图片预览组件

一、前言 本篇主要介绍,vue项目手写一个图片预览组件,组件主要包括图片方法、图片缩小、显示原图、下载、复制等功能。 二、实现方式 首先我们需要做一个图片预览组件都有的功能表头,如下图 主要功能包括,放大、缩放比例显示、…

设计模式:02观察者模式--labview实现

引言 在观察者模式中,一种叫做被观察者的对象维护了观察者对象的集合,当被观察者对象发生改变时候,它会通知观察者。 在被观察者对象所维护的观察者集合中,能够添加或者删除观察者。被观察者状态变化能够传递给观察者。这样观察者…

路西德Lucid EDI项目测试流程

Lucid Motors路西德汽车拥有电动汽车制造、储能技术和代工生产等业务,目前已成功研制出其第一辆汽车Lucid Air,并开始对外销售。随着企业的不断发展,对自动化的要求也越来越高,作为制造型企业,Lucid早已实现机械自动化…

多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂

多个版本JDK切换 多个JDK:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂 提示:看了网上很多教程,5w观看、32w观看、几千观看的,多多少少带点坑,这里我就把踩过的坑都给抹了 文章目录多个…

架构演进技巧

架构演进剖析 架构演进定义 定义:通过设计新的系统架构(4R)来应对业务和技术的发展变化 目的:1、应对业务发展带来新的复杂度;2、应用技术发展带来的复杂度新的解决方法 关键:1、新架构;2、…