让GPT输出JSON数据:深入理解结构化数据处理
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于阅读和编写,同时也易于机器解析和生成。JSON的主要作用是在不同系统之间传递数据,比如在网页和服务器之间、在应用程序之间等等。
JSON数据是以键值对的形式组织的,其中键(key)是字符串,值(value)可以是字符串、数字、布尔值、数组、对象等。这种简单的结构使得JSON很容易理解和使用。
下面是一个简单的JSON数据示例:
{
"name": "John",
"age": 30,
"isStudent": false,
"grades": [90, 85, 88],
"address": {
"city": "New York",
"zipcode": "10001"
}
}
这个JSON数据表示一个人的信息,包括姓名(name)、年龄(age)、是否是学生(isStudent)、成绩(grades)和地址(address)。其中,姓名是一个字符串,年龄是一个数字,是否是学生是一个布尔值,成绩是一个数组,地址是一个对象,包含城市和邮政编码两个属性。
JSON的使用具有以下几个优点:
-
易于阅读和编写: JSON使用简洁清晰的文本格式,易于人类理解和书写,有助于减少错误。
-
跨平台兼容性: JSON是一种与编程语言无关的格式,几乎所有现代编程语言都支持JSON的解析和生成,因此可以在不同平台和系统之间轻松地交换数据。
-
数据结构灵活: JSON支持复杂的数据结构,包括嵌套对象和数组,可以很好地表示各种类型的数据。
-
网络传输效率高: JSON数据体积较小,传输速度快,适合在网络上进行数据交换。
总的来说,JSON是一种简单、轻量级、易于使用的数据交换格式,广泛应用于Web开发、移动应用开发、数据接口传输等领域,是现代软件开发中不可或缺的重要工具。
为什么要使用JSON
从上面的介绍中,我们不难看出,JSON是一种非常简洁且通用的结构化数据格式。广泛应用于所有的编程语言中,但是为什么我们要使用JSON,或者说一定要使用JSON呢?
老师的烦恼
先来看一个举个例子,假如我现在是一位小学老师,开学第一天让班上的小朋友写一段个人介绍,他们写完以后我想要把这个数据录入到班级的一个学生管理系统里面。每个小朋友填写的信息肯定是不一样的,每个人语言的表述方式也是不一样的,传统的方式很难获取到想要的内容,这时候我们就可以使用GPT来帮助我们提取这些信息。
我叫张三,今年9岁了,我的家住在幸福小区,我的妈妈是老师,我的爸爸是医生。我喜欢画画、唱歌。
我是小美,8岁,我住在梧桐花园,我最喜欢跳舞,爸爸很忙,每天都在抓坏人,妈妈在家照顾我。
通过上节课学到的内容,我们简单写了一个Prompt:
# Role
学生信息提取器
## Skills
- 精通中文
- 能够理解文本
## Action
根据提学生的描述,提取出对应的 姓名、年龄、父母工作、家庭住址、爱好 等信息
## Constrains
- 忽略无关内容
- 针对学生的自我介绍你可以采用更合理的表述方式
- 针对父母工作你可以根据描述,转换为更合理的职业名称
## Format
姓名:
年龄:
父亲工作:
母亲工作:
家庭住址:
爱好:
输入上面的示例信息,就可以获得我们想要的结果:
姓名:张三
年龄:9岁
父亲工作:医生
母亲工作:老师
家庭住址:幸福小区
爱好:画画、唱歌
姓名:小美
年龄:8岁
父亲工作:警察
母亲工作:家庭主妇
家庭住址:梧桐花园
爱好:跳舞
这么看好像没问题,但需要思考的是,假如我们需要把这些数据录入到学生管理系统该怎么办?如果只是这两个学生我们可以通过手动来录入,如果是100个学生呢?这个老师怕是要累坏了。
这时候我们编写一个程序,批量把这些数据导入到学生管理系统中,这时候如果是上面这种格式,我们很难提取这些对应关系。
因为对于计算机来说,我们导入的数据是一个多行文本,假如我想把学生姓名取出来,那就是:
文本的第一行
从 "姓名:" 开头的字符串后面截取到这一行的末尾
其他的也是同样的道理,先不说这种方法的效率和出错的概率,假如我们现在要新增一个学生性别的信息:
姓名:小美
性别:女
年龄:8岁
父亲工作:警察
母亲工作:家庭主妇
家庭住址:梧桐花园
爱好:跳舞
这时候我们代码里原来第二行应该是取年龄的,现在变成了性别,这时候我们的代码就会报错。
那有的同学可能会思考,我们直接用 年龄:
来判断年龄不就好了,不用第几行。
那假如我们的数据要求再加一个父母的年龄:
姓名:小美
性别:女
年龄:8岁
父亲工作:警察
年龄:36岁
母亲工作:家庭主妇
年龄:34岁
家庭住址:梧桐花园
爱好:跳舞
显然是不行的,根本的原因就是这个数据没有结构,面对简单的数据或许还可以,但是面对复杂的数据时就没办法了,必须要使用JSON格式。
JSON的好处就是所有的编程语言都支持,并且提供了方便的工具去操作它,而且无论多么复杂的结构关系,JSON都可以表示出来。
例如上面的案例,JSON就可以表示为:
{
"name": "小美",
"age": 8,
"father": {
"job": "警察",
"age": 36
},
"mother": {
"job": "家庭主妇",
"age": 34
},
"address": "梧桐花园",
"hobby": ["跳舞"]
}
所以,很多时候我们需要GPT直接返回给我们JSON格式的数据,这种在实际的工作场景或者更复杂的领域中,是非常常见的操作。
这也是我们想要使用AI解决更复杂问题的基础。
如何让GPT输出JSON格式的数据
其实很简单,我们只需要对Prompt进行一些简单的修改即可:
修改前
# Role
学生信息提取器
## Skills
- 精通中文
- 能够理解文本
## Action
根据提学生的描述,提取出对应的 姓名、年龄、父母工作、家庭住址、爱好 等信息
## Constrains
- 忽略无关内容
- 针对学生的自我介绍你可以采用更合理的表述方式
- 针对父母工作你可以根据描述,转换为更合理的职业名称
## Format
姓名:
年龄:
父亲工作:
母亲工作:
家庭住址:
爱好:
修改后
# Role
学生信息提取器
## Skills
- 精通中文
- 能够理解文本
- 精通JSON数据格式
## Action
- 根据提学生的描述,提取出对应的 姓名、年龄、父母工作、家庭住址、爱好 等信息,并以JSON格式输出
## Constrains
- 忽略无关内容
- 针对学生的自我介绍你可以采用更合理的表述方式
- 针对父母工作你可以根据描述,转换为更合理的职业名称
- 必须保证你的结果只包含一个合法的JSON格式
## Format
- 对应JSON的key为:name, age, father_job, mother_job, address, hobby
演示
我叫张三,今年9岁了,我的家住在幸福小区,我的妈妈是老师,我的爸爸是医生。我喜欢画画、唱歌。
{
"name": "张三",
"age": 9,
"father_job": "医生",
"mother_job": "老师",
"address": "幸福小区",
"hobby": ["画画", "唱歌"]
}
恭喜学完本章节,你已经了解了如何使用GPT输出JSON格式的数据,具备解决更复杂问题的基础了。如果你有任何疑问或想要跟大家进行交流,欢迎到 Github issues (opens in a new tab) 发表学习心得以及反馈问题 👏🏻