JSON oData.metadata

JSON oData.metadata,json,odata,Json,Odata,我对使用Microsoft oData API从服务器返回JSON有疑问。 我想不出来 问题1: http://localhost:63717/odata/City(1) Fiddler返回下面的原始数据。 一切都在它自己的括号里 { "odata.metadata":"http://localhost:63717/odata/$metadata#City/@Element","CityID":1,"CityName":"Minnetonka","CityAddr1":null,"City

我对使用Microsoft oData API从服务器返回JSON有疑问。 我想不出来

问题1:

http://localhost:63717/odata/City(1)
Fiddler返回下面的原始数据。 一切都在它自己的括号里

{
  "odata.metadata":"http://localhost:63717/odata/$metadata#City/@Element","CityID":1,"CityName":"Minnetonka","CityAddr1":null,"CityAddr2":null,"CityCity":null,"CityState":null,"CityZip":null,"CityPhone":null,"CityFAX":null,"CityExtent":"-93.53,44.88,-93.39,44.93","CityHeaderImage":null
}
问题2:

http://localhost:63717/odata/City?$filter=CityName eq 'Minnetonka'
Fiddler返回下面的原始数据。 数据包含在两组括号内的数据中

{
  "odata.metadata":"http://localhost:63717/odata/$metadata#City","value":[
    {
      "CityID":1,"CityName":"Minnetonka","CityAddr1":null,"CityAddr2":null,"CityCity":null,"CityState":null,"CityZip":null,"CityPhone":null,"CityFAX":null,"CityExtent":"-93.53,44.88,-93.39,44.93","CityHeaderImage":null
    }
  ]
}
在oData请求中,如何格式化返回的$filters的JSON? 在Query2中,那个odata.metadata快把我累死了。
请解释我做错了什么。

你没有做错任何事,这两种格式实际上代表了两种不同的结果形式

首先,在为实体指定密钥时请求单个项


在第二种情况下,您可能需要一个实体列表。元数据在这个响应中是独立的,否则它将对返回的每个项目重复,并且在内容长度方面是一种浪费

在第一个示例中,您只有一个
City
元素(在请求中表示为
City(1)
,在结果路径中表示为
#City/@element


在第二个示例中,结果中的
value
属性显示了
City
类型的数组(一个或多个对象的列表)<代码>[…]表示JavaScript中的数组。对于
$filter
类型查询,这是我所期望的。您还可以看到响应路径没有那么具体(
#City
而不是
#City/@Element

odata.metadata
属性值中显示的路径描述了返回的元素的结构,正如我在上面展示的两个示例所示。返回数据的格式将根据您的请求而改变

如果您解析返回的JSON有问题,请考虑使用库来为您重启。例如:


[]

因为您处理实体的方式

使用//localhost:63717/odata/City(1)可以寻址一个实体(“/entityset/key”)。您将始终返回一个城市(如果存在)。它不需要返回数组,因为它永远不会返回多个数组


使用//localhost:63717/odata/City,可以寻址一组实体(“/entityset”)。可以返回0到n个城市实体,因此需要一个集合。

在第二个示例中,结果中的
value
属性显示了
City
类型的数组(一个或多个对象的列表)<代码>[…]表示JavaScript中的数组。在第一个示例中,您只有一个
City
元素。
odata.metadata
属性值中显示的路径描述了返回的元素的结构。@SCB:谢谢,我列出了该源和源本身的所有JavaScript库。谢谢Cory和all:现在我知道我在Query2中返回了许多结果,下一步将如何将数据放入JavaScript网格控件?查询1数据正常。与Query2相比,情况并非如此。任何有帮助的评论。@kanderson:我会作为一个单独的问题问这个问题。在里面,展示你尝试过的和不起作用的。如果您愿意,请参考此问题。谢谢Cory!datajs就是解决方案。