【问题标题】:Is the $id token a JSON Standard?$id 令牌是 JSON 标准吗?
【发布时间】:2016-01-23 11:48:53
【问题描述】:

使用 Microsoft WebApi 2(使用第三方 Json.NET 库),假设我返回以下 people 数组:

var p1 = new Person("Alice");
var p2 = new Person("Bob");
p1.Sibling = p2;
p2.Sibling = p1;
var people = new[] { p1, p2 };

为了避免循环引用,Json.NET 会输出以下 JSON:

[  
   {  
      "$id":"1",
      "Name":"Alice",
      "Sibling":{  
         "$id":"2",
         "Name":"Bob",
         "Sibling":{  
            "$ref":"1"
         }
      }
   },
   {  
      "$ref":"2"
   }
]

Javascript 的 JSON.parse() 方法对这种语法一无所知。我查阅了 JSON 规范,发现在指针中使用了 $ref 关键字,但没有看到它们使用 $id 关键字。 Json.NET 有什么奇怪的地方吗?还是它在 JSON 规范中没有得到广泛支持?

【问题讨论】:

  • json 是 json。就它而言,这些只是键:值。这些键/值代表什么取决于生成数据结构的代码,该数据结构最终被编码为 json。如果键是"id""$id""foobar",json 本身并不关心。你所拥有的是完全有效的 json。一个包含两个对象的数组,包含更多的子数据。

标签: json json.net


【解决方案1】:

不,$id$ref 不是 JSON 标准的一部分(您会注意到在 JSON.org 的任何地方都没有提到它);这是 Json.Net 用来标记对象并引用它们以保留反序列化引用的约定。其他 JSON 库可能会也可能不会遵循相同的约定。有关详细信息,请参阅 Json.Net 文档中的 Preserving Object References

注意:有一些 javascript 方法可以处理解析来自 Json.Net 的 $id/$ref 表示法。您可能对这些示例感兴趣:

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2020-06-10
    • 2012-09-13
    • 1970-01-01
    • 2018-08-29
    • 2021-05-14
    • 2016-02-03
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多