这是有效的 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 对象吗?

所有 JSON 对象都是有效的 JavaScript 对象吗?

所有 JSON 对象都是有效的 JavaScript 对象吗?