json - JSON 嵌套对象是必需的吗?
问题描述
我对 JSON 的编写方式有疑问。在可用性方面哪个更好?我正在尝试使用单个 JSON 文件在 PHP 和 Swift 中进行解码,并且想知道哪个是编写 JSON 的更好方法。本质上是嵌套对象或没有嵌套对象。
选项1
{
"title": "Test",
"image": "image",
"imageCard": "imae2",
"count": 20,
"section": "personal",
"description": "Description",
"color": "#F17B08",
"content": {
"video": true,
"text": true,
"updated": false
},
"homepage": {
"featured": false,
"popular": false,
"new": false
},
"levels": "7-12"
}
]
选项 2
[
{
"title": "Test",
"image": "image",
"imageCard": "imae2",
"count": 20,
"section": "personal",
"description": "Description",
"color": "#F17B08",
"video": true,
"text": true,
"updated": false,
"featured": false,
"popular": false,
"new": false,
"levels": "7-12"
}
]
谢谢!
解决方案
JSON 结构通常会被映射到面向对象的类。JSON 结构越接近程序的模型(所有类,以及每个类与其他类的关系如何),反序列化来自 API 的响应就越容易。
现在,JSON 嵌套是必要的,就像您与您的类进行关联、组合 和聚合一样。
假设您有一个Student
具有名称、唯一 ID 和一个Teacher
提供许多Courses
有一个嵌套的JSON,例如:
[
{
"Name":"John Doe",
"ID":"948AFF",
"Teacher":{
"John Nash",
"Classes":[
{...},
{...},
{...}
]
}
},
{
"Name":"William Smooth",
"ID":"123LMLG",
"Teacher":{
"Ulrich Stokes",
"Classes":[
{...},
{...},
{...}
]
}
}
]
是一种直观、干净、灵活的 JSON 结构方式。因为它很容易映射到您的模型。数组的每个元素都是 a 的一个实例,Student
它有一个 的实例Teacher
,它有一个 的列表Courses
。
而如果你有一个像你建议的扁平结构:
[
{
"Name":"John Doe",
"ID":"948AFF",
"TeacherName":"John Nash",
"ClassesOfTheTeacher":[
{...},
{...},
{...}
]
},
{
"Name":"William Smooth",
"ID":"123LMLG",
"TeacherName":"Ulrich Stokes",
"ClassesOfTheTeacher":[
{...},
{...},
{...}
]
}
]
强制您系统地将每个字段映射到您的一个类的属性。它不容易粘在您的模型上,您必须进行一些操作才能将其映射到您的模型。
此外,如果您突然想Teachers
为每个学生设置 .. 3 怎么办?你最终会得到 TeacherName1、TeacherName2、TeacherName3 和 ClassesOfTheTeacher1、ClassesOfTheTeacher2 等吗?可能不是。
如果您的类中有关联/组合/聚合,则嵌套 JSON 是必需的。
推荐阅读
- android - 如何通过智能手机上的应用程序断开 Android-auto
- php - 获取一个月中特定周的日期范围
- actions-on-google - 从谷歌助手访问时未关联帐户状态
- python - 使用 QSettings 保存 QRadioButtons 的状态未在 PyQt5 中正确保存值
- r - 如何对分类模型执行前向回归
- mysql - 在 2 个容器之间共享 MySql 卷
- rsync - lsyncd 权限被拒绝(公钥 gssapi-keyex gssapi-with-mic 密码)
- google-signin - 针对 iOS 14 更新后的 AppAuth 错误:将 'openURL' 替换为 'openURL:options:completionHandler:'
- apache-spark - 从 Java 程序调用 K8s 上的 Spark Operator
- javascript - 使用 xterm.js 粘贴时只听 onData 而不是 onKey