当前位置: 首页 > news >正文

Cjson格式解析与接入AI大模型

JSON格式的解析与构造

  • 基本概念

JSON是JavaScript Object Notation的简称,中文含义为“JavaScript 对象表示法”,它是一种数据交换的文本格式,而不是一种编程语言。

JSON 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

当今互联网时代,JSON 已经成为了各种应用程序之间数据交换和通信的主流格式。它易于阅读和编写,并且易于机器解析和生成,常在Web开发中用于数据的格式化和传输。

  • 数据格式
  1. 对象

JSON 由两种数据结构组成:对象和数组。对象(object)是由键值对组成的无序集合,键是字符串,值可以是任何类型,包括对象和数组。对象由一对花括号{ }包围,键和值之间用冒号:分隔。键值对之间用逗号,分隔。

假设想要以JSON格式记录天气现象文字、天气现象代码、温度(单位为c摄氏度或f华氏度)。

{

"text" : "多云", //天气现象文字

"code": "4", //天气现象代码

"temperature": "14", //温度,单位为c摄氏度或f华氏度

}

  1. 数组

JSON 由两种数据结构组成:对象和数组。数组(array)是值(value)的有序集合,每个值可以是任何类型,包括对象和数组。数组由一对方括号[ ]包围,值之间用逗号,分隔。

[ "apple", "banana", "orange"]

在上面的例子中,可以看到数组包含三个字符串元素,分别是:"apple"、"banana"和"orange"。

注意:键的值有多种类型,值(value)可以是花括号{ }括起来的字符串(string)、数值(number)、布尔值(true/false)、 null、对象(object)或者数组(array),并且这些结构可以嵌套。

{

“name” : ”lmx”,

“age” : 30,

“score” : {

“C” : 65.0,

“linux”: 80.5

},

“sex” : “man”

}

提示:JSON格式本质也是字符串,只不过字符串中存储的数据需要按照JSON格式进行构造。

  • 解析方法

一般嵌入式开发中可以使用cJSON库对JSON格式进行解析,cJSON库是基于C语言的一个开源项目,github下载地址:https://github.com/DaveGamble/cJSON

cJSON库主要的文件有两个:一个是cJSON.c 一个是cJSON.h。使用时在工程中包含头文件即可,在cJSON.h头文件中有一个用于解析JSON格式的结构体,如下:

  1. 解析JSON流程
  1. 想要解析JSON格式,前提是得到存储了JSON数据的字符串,一般就是HTTP的请求或者响应的时候,绝大多数的情况都是服务器响应的数据为JSON格式。

  1. 需要把存储了JSON数据的字符串进行转换,转换JSON格式,此时可以通过cJSON库中README.md来分析,可以知道调用 cJSON_Parse() 进行解析,该函数的返回值就是cJSON格式的数据。

  1. 如果得到了转换成功的JSON格式的字符串,可以对该字符串进行调试输出,可以选择调用cJSON_Print(),该函数的返回值就是存储了JSON格式的字符串,如下:

  1. 如果输出结果没有问题,则可以开始对JSON数据进行解析,其中可以先从JSON对象中获得某个键的值,相当于对某个键值对进行解析,注意:如果键值对的值的类型不是字符串、整型、浮点型,则需要继续对键值对进行解析。否则,可以直接输出键值对的内容,利用JSON对象的结构体指针cJSON *的成员valuestring、valueint、valuedouble。

  1. 如果键值对的类型不是基本类型,而是对象或者数组,则需要继续解析,此时分为两种情况,第一种是情况:键值对的值的类型是对象,此时可以选择继续调用cJSON_GetObjectItem()函数。
  1. 如果键值对的类型不是基本类型,而是对象或者数组,则需要继续解析,此时分为两种情况,第一种是情况:键值对的值的类型是数组,此时可以选择调用cJSON_GetArraySize()函数,该函数的作用是获取数组中的元素的数量。另外,可以选择调用cJSON_GetArrayItem()函数,可以获取数组中的元素,如果数组的元素类型是对象,则可以选择调用cJSON_GetObjectItem()函数对对象进行解析。

  • 代码案例

  1. 构造JSON流程
  1. 如果打算构造JSON格式,则需要首先创建一个JSON顶层对象,需要调用cJSON_CreateObject(),也就是该函数可以创建对象,其实就是构造一对{ }。

  1. 可以选择继续调用cJSON_CreateObject()来创建新的小对象,此时可以选择向小对象中添加键值对,添加键值对的前提是构造键值对,需要先把键值对的值添加到创建的对象中,再把小对象添加到其他对象中,具有嵌套关系。根据键值对的值的类型,可以选择调用。

  1. AI大模型的接入与应用

目前的AI大模型的种类较多,一般可以选择接入目前比较主流的大模型,本次就以字节跳动旗下的火山引擎发布的豆包大模型为例,学习如何通过HTTP协议在线接入AI大模型。

  1. 注册账号

  1. 账号认证

  1. 选择产品

  1. 选择模型

  1. 分析模型

  1. 开通服务

作业:首先需要注册一个账号,然后申请开通某个模型的服务,然后阅读模型的API调用文档。

  1. 获取密钥

注意:API_KEY是很重要的,是作为HTTP的请求的鉴权信息使用,需要作为HTTP的Authorization请求字段使用。

请求头部字段结构: Authorization: Bearer 6d4d987a-d792-43ae-8571-806b02792838\r\n

  1. 请求参数

可以知道,如果想要接入AI大模型,需要使用HTTP服务,并且需要构造HTTP的请求,请求需要包含以上2个参数。

  1. model

是必填项,需要填入接入点的ID,格式一般可以参考官方提供的接入案例,具体的流程如下:

  1. messages

是必填项,需要填写消息的对话列表,是固定的格式,其中需要包含role和content,如下

role指的是角色,分为system和user,system指的是豆包大模型,user指的是用户,大模型和用户需要分别输入对应的对话内容。

对于system的content指的是提供给大模型的提示词,对于user的content指的是提供给大模型的对话内容。

注意:豆包大模型的HTTP的请求参数是以JSON格式进行构造的,所以可以参考接入示例:

{

"model": "doubao-1-5-lite-32k-250115",

"messages": [

{

"role": "system",

"content": "你是人工智能助手."

},

{

"role": "user",

"content": "常见的十字花科植物有哪些?"

}

]

}

  1. 接入方式

可以知道豆包大模型可以采用HTTP的POST请求来进行对话,由于使用的是主流的HTTP/1.1的协议版本,支持长连接,但是如果打算在请求中包含请求body的话,一般是需要在构造HTTP请求的时候使用头部字段Content-Length : xxx xxx是一个整数,用于记录数据长度

一般HTTP/1.1的协议版本中,客户端和服务器都需要指定请求体/响应体的长度,方便双方读取指定长度的数据。

  1. 程序设计

  1. 响应格式

  1. 运行效果

练习:自己选择豆包大模型,利用HTTP协议进行接入,要求可以通过键盘实现对话,并且要求利用cJSON库对服务器的响应体进行解析,把服务器响应的内容输出到终端。

http://www.xdnf.cn/news/359389.html

相关文章:

  • Git标签删除脚本解析与实践:轻松管理本地与远程标签
  • Mysql--基础知识点--91.2--processlist
  • 【LangChain高级系列】LangGraph第一课
  • 开目新一代MOM:AI赋能高端制造的破局之道
  • redhat9 安装pywinrm
  • 制造企业如何选择项目管理软件系统提高项目执行的效率和质量
  • 面试题:请解释Java中的反射机制,并说明其使用场景
  • 2025年科学教育与文化交流国际会议(IACSECE 2025)
  • 【软件设计师:数据】17.数据安全
  • LeetCode 3342.到达最后一个房间的最少时间 II:dijkstra算法(和I一样)
  • 基于OpenCV的人脸识别:EigenFaces算法
  • 变桨系统升级新引擎:CAN转ModbusTCP协议转换技术破解风电数字化困局
  • 在 Spring Boot 中实现动态线程池的全面指南
  • Github 2025-05-09 Java开源项目日报 Top10
  • Error parsing column 10 (YingShou=-99.5 - Double) dapper sqlite
  • 坐席业绩可视化分析工具
  • AbMole:QS-21的作用机理及免疫应用
  • J-Scope的RTT模式
  • 智慧工会服务平台建设方案Word(23页)
  • 智慧农业运维平台养殖—传感器管理监控设计—仙盟创梦IDE
  • AI日报 · 2025年5月09日|OpenAI Deep Research 上线 GitHub Connector Beta
  • 爬虫学习————开始
  • 健康养生:雕琢生命的细腻艺术
  • springboot3 + mybatis-plus3 创建web项目实现表增删改查
  • isaacsim基础基础教程,以及如何添加fixedjoint,在Isaacsim中什么是prim,什么是xform
  • IoT无线组网模块,万物互联的底层通信基石
  • OpenHarmony 以太网卡热插拔事件接口无效
  • 【高级IO】多路转接之单线程Reactor
  • 实验-有限状态机2(数字逻辑)
  • 【数据结构】算法的复杂度