这是有效的 JSON 吗?电子邮件地址作为参考类型?
Posted
技术标签:
【中文标题】这是有效的 JSON 吗?电子邮件地址作为参考类型?【英文标题】:Is this valid JSON? Email address as reference type? 【发布时间】:2021-12-06 16:25:57 【问题描述】:我正在将我们的系统与第 3 方集成。他们发送了一个他们期望的 JSON 示例。 JSON 对我来说似乎不正确。用户对象有一个电子邮件地址,看起来像是被用作reference type's member name instead of value type's member name。换句话说,它不应该是一个用户数组,并且数组中的每个项目都是用户对象,其中“电子邮件”:“example@company.com”作为属性之一?
我要问他们,但也想在这里查看是否有人认为这个 JSON 有问题
"users":
“example@company.com”:
"First_Name": "John",
"Last_Name": "Doe",
"Member_Id": "XX9008000",
"Mailing_Address":
"Street": "P O Box 111 ",
"City": "Red City",
"State": "CA",
"Zip": "99999"
,
"enrollments": [
"Student": "example@company.com",
"Course_Ids": "369,370"
]
我正在使用 Newtonsoft.Json 将 C# 对象转换为 JSON。输出的格式总是引用类型的类型:引用类型的属性/值枚举。
"users":["name":"john","id":"a1","name":"tom","id":"a2"]
或
"users":"user1":"name":"john","id":"a1","user2":"name":"tom","id":"a1"
但它永远不可能:
"users":"a1":"name":"john","a2":"name":"tom"
因为a1和a2是值的值类型string Id
它可能是有效的JSON,但可以通过序列化库代码获得吗?还是我必须手动构建它?
【问题讨论】:
使用电子邮件地址作为对象的键在语法上对 JSON 有效。然而,奇怪的是电子邮件地址周围的引号字符。对象末尾还缺少一个右花括号。 除了缺少的“”,它在语法上似乎是正确的。语义上存在问题。如果键是复数(“用户”),则预期内容是对象数组而不是单个对象。在当前示例中,无法添加多个用户,因此,复数看起来像是一个错误。我敢打赌,一旦你指出这个观察,他们会给你另一个版本 最后缺少的花括号是我的错误。我已经编辑了我的问题。我正在使用 Newtonsoft.Json 将 C# 对象转换为 JSON。输出的格式始终为引用类型名称:引用类型属性/值枚举。电子邮件地址如何按他们想要的方式输出?也就是说,值类型值:引用类型属性/值枚举。除非我手动构建 JSON 您应该将其添加到问题中......和/或联系提供商以验证这是一个有效的示例。我希望用户部分是一个数组,但电子邮件地址可能是***...并且enrollments
是否与每个用户或整体相关?我怀疑是整体的,因为否则那里不需要电子邮件地址。
可能是C#的东西,不过不知道你说的“引用类型”和“值类型”是什么意思。
【参考方案1】:
忽略此处的引用类型(应该是“<..>”)->“example@company.com”,这是一个有效的 JSON,并且是此类对象的常见用途。
结构体不是对象数组,而是对象的 id,在其内部是对象。
您需要一个 Dictionary
【讨论】:
不知道字典会这样序列化!非常感谢!【参考方案2】:第一个问题
不应该是用户数组吗?
这是具有一个或多个元素的不同 json 响应的典型问题。
要生成 Json,最好坚持使用所谓的 Badger-Fish 表示法 http://badgerfish.ning.com/,它指出:
“嵌套元素变为嵌套属性”,但“同一级别的多个元素变为数组元素”,因此当有一个元素时,显示一个属性,但如果有多个元素,则显示一个数组。
由于同一级别只有一个“users”元素和一个“enrollments”元素,因此不应声明任何数组。
【讨论】:
以上是关于这是有效的 JSON 吗?电子邮件地址作为参考类型?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MailAddress 认为 'john@gmail.'是有效的电子邮件地址吗?
JQuery.validate() 将无效域格式的电子邮件地址作为有效地址传递
所有 JSON 对象都是有效的 JavaScript 对象吗?
所有 JSON 对象都是有效的 JavaScript 对象吗?