JSON 中的根节点

2023-11-24

我的任务是定义两个网络应用程序之间的通信。我决定为此使用 JSON。 JSON 中具有根节点的情况有多常见?

假设我们有一个汽车对象。这是以“Car”为根节点的 JSON:

{"Car": { 
  "Make":"Mustang", 
  "YearBuilt":"1999"}}

现在假设我有一个 Tire 对象,并且由于我们正在标准化根节点,因此这个对象也必须拥有它。

{"Tire": {"Make": "Brirdgestone", "Size":"15"}}

将轮胎对象 JSON 集成到原始 Car 对象中可以看出它是多么的笨拙。

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999",
"Tires": "[{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Bridgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
]}}

因此在 PHP 中序列化后,第一个轮胎的品牌将是$object->Car->Tires[0]->Tire->Make。由于根节点的原因,那里有额外的轮胎级别。

如果 Tire 没有根节点,代码可能会精简很多。

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999",
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}}]}}

在 PHP 中,由于冗余较少,因此混乱较少:第一个轮胎的品牌由$object->Car->Tires[0]->Make

没有根节点有什么不好吗?我喜欢有根节点,因为它的作用就像一个类名,但不必要的级别给我带来了很多麻烦,并使遍历变得更加复杂。


我会省略两个根节点,Tire and Car.

请记住,JSON 的主要用途是以紧凑格式通过网络传输对象。除此之外没有其他真正的用途。您想要使用 JSON 编码的数据,并通过添加根节点来创建没有真正身份和用途的空容器对象。当省略根节点时,你得到

$car->tires[0]->make

在 JS 中你会得到

car.tires[0].make

这更加清晰并且更好地代表了对象。请记住,这就是您必须处理的内容。当然,您可以使用某种 JSON 映射器来映射对象应如何序列化并生成上述对象,但这是大量额外的工作,恕我直言,这不值得。

如果您想在 JSON 中包含类名,只需将其设为属性即可,例如

{ 'klass': 'Car', 'make': 'Mustang', 'year':1999 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON 中的根节点 的相关文章

  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • 使用 BACK 键隐藏键盘事件

    我注意到在Android Market Application 当您单击搜索按钮时 它会显示键盘 但是当您单击back按钮 搜索EditText变得不可见并且keyboard被隐藏 问题是我无法隐藏EditText按后退键后隐藏键盘后 因为
  • Visual Studio自定义构建步骤规则?

    使用 Visual Studio 2008 当我向 C 项目添加一个不存在的文件时 c cpp h rc或者 IDE 无法识别的任何内容都会弹出一个对话框 询问我是否要为此类文件创建自定义构建步骤规则 有谁知道如何在不添加文件的情 况下进入
  • [A]如何在javafx中使MP3重复播放?

    我希望我的 mp3 文件在完成后再次重复 但我无法创建循环来重复播放我的文件 我使用了这段代码 但只有它在完成后播放我的文件的第一秒 AudioClip myMusic myMusic setCycleCount AudioClip IND
  • 代码检查 - 命名范围参考

    在 Rubberduck 2 0 11 2453 中运行代码检查后 有 4 个范围引用被标记为 成员 Range 隐式引用 ActiveSheet 有问题的范围是指命名范围 是否有必要限定命名范围引用 Private Sub RunORat
  • gcc生成目标文件时创建目录

    gcc o abc def o def c产生def o目录中的文件abc 仅当目录存在时abc 当生成的目标文件的封闭目录不存在时 有没有办法让 gcc 创建一个目录 如果没有 那么提前自动创建目录 尤其是 Makefile 的最简单方法
  • 将 rowversion 转换为 bigint

    在我的 C 程序中 我不想使用字节数组 因此我将 rowversion 数据类型转换为 bigint SELECT CAST version AS BIGINT FROM dbo mytable 所以我收到一个数字而不是字节数组 这种转换总
  • 在 sphinx 文档中包含独立的 HTML 页面

    对于我的项目的大部分文档 我更喜欢标准的 sphinx 布局 然而 对于登陆页面 我更喜欢使用自定义 HTML CSS JS 而不使用普通 sphinx 网站的任何布局 目录或侧边栏 有没有一种方法可以在 sphinx 生成的网站中包含原始
  • 自定义属性未在样式和主题内解析

    我有一个带有自定义主题的 Android 应用程序 该应用程序是 2 3 年前开发的 我有这个风格attr xml资源文件
  • 如何在同一端口 4200 上运行 Angular 4 应用程序和 NodeJS api 以进行生产和开发?

    我已经创建了 Angular 4 应用程序 我可以使用它来运行它ng serve open它运行在localhost 4200 我想要的是我还使用创建了 apinodejs现在在同一个角度项目中我想运行该 APIlocalhost 4200
  • 这个 128 位整数乘法在汇编 (x86-64) 中如何工作?

    我正在阅读计算机系统 程序员的视角作业是描述这个算法是如何工作的 C函数 void store prod int128 dest int64 t x int64 t y dest x int128 y 集会 movq rdx rax cqt
  • 如何写下 rspec 来测试救援块?

    我有这样的方法 def className def method name some code rescue some code and error message end end 那么 如何写下 rspec 来测试救援块 如果你想拯救 就
  • 从 WaitHandle.Wait 构造任务

    我选择返回Task
  • CodeIgniter - 如何检查每种方法使用的会话

    假设我的控制器名为Book 我有很多方法 比如get book read book remove book 如果没有用户登录 则无法使用类中的任何方法 我可以获得user id来自会话 我的问题是 检查是否存在的最佳方法是什么user id
  • 在 Scala 中,如何从可序列化的类型创建 TypeTag? [复制]

    这个问题在这里已经有答案了 在 Scala 反射中 通常可以使用 TypeCreator 从 Type 构造 TypeTag object TypeUtils import ScalaReflection universe def crea
  • Slim 3在中间件中获取当前路由

    我想在中间件类中获取当前 I 路由的名称 以前 在 Slim 2 中 您可以像这样获取当前路线 route this gt app gt router gt getCurrentRoute 但这个功能在Slim 3 0版本中已经被删除了 我
  • 如何尝试多个 SELECT 直到获得结果?

    如果我想以递减精度搜索表中的单行 例如像这样 SELECT FROM image WHERE name LIKE text AND group id 10 LIMIT 1 当这没有给我结果时 尝试这个 SELECT FROM image W
  • C++ 字符串排序像人类一样吗?

    我想按照人类对字母数字字符串进行排序的方式对其进行排序 即 A2 位于 A10 之前 a 当然位于 Z 之前 有没有什么方法可以不写迷你解析器 理想情况下 它还会将 A1B1 放在 A1B10 之前 我看到问题了 Microsoft SQL
  • 如何将一个数据帧映射到另一个数据帧(python pandas)?

    给定这两个数据帧 如何获得预期的输出数据帧 长的方法是循环遍历数据帧的行iloc然后使用map转换后的函数df2 to a dict将 x 和 y 映射到它们的分数 这看起来很乏味 并且在大型数据帧上运行需要很长时间 我希望有一个更清洁的解
  • 使用 python 验证 SSL 中的对等点

    我试图找出如何通过 python 中的服务器验证自签名证书 我在谷歌上找不到太多数据 我还想确保服务器网址 预先感谢您的任何见解 从我的第一个回复的评论中 我发现人们普遍误解了 验证证书的含义 我会尝试在这里写一个简短的解释 以消除一些幻想
  • JSON 中的根节点

    我的任务是定义两个网络应用程序之间的通信 我决定为此使用 JSON JSON 中具有根节点的情况有多常见 假设我们有一个汽车对象 这是以 Car 为根节点的 JSON Car Make Mustang YearBuilt 1999 现在假设