首页 > 解决方案 > 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 结构通常会被映射到面向对象的。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 是必需的。


推荐阅读