2016-11-03 7 views
0

ODataクエリで、特定の名前と値のペアの代わりに、生の配列を返すように指定する方法はありますか?私は、次のその結果のODataクエリを持っている場合たとえば、私は、変換を行うことは明らかに可能性がありますがODataプロトコルは、オブジェクトの配列を生の値の配列に変換する方法を提供しますか?

{ 
    "@odata.context": "http://blah.org/MyService/$metadata#People", 
    "value": [ 
    { 
     "Name": "Joe Smith", 
     "Age": 55, 
     "Employers": [ 
     [ "Acme", "1/1/1990" ], 
     [ "Enron", "1/1/1995" ], 
     [ "Amazon", "1/1/1999" ] 
     ] 
    }, 
    { 
     "Name": "Jane Doe", 
     "Age": 30, 
     "Employers": [ 
     [ "Joe's Crab Shack", "1/1/2007" ], 
     [ "TGI Fridays", "1/1/2010" ] 
     ] 
    } 
    ] 
} 

{ 
    "@odata.context": "http://blah.org/MyService/$metadata#People", 
    "value": [ 
    { 
     "Name": "Joe Smith", 
     "Age": 55, 
     "Employers": [ 
     { 
      "Name": "Acme", 
      "StartDate": "1/1/1990" 
     }, 
     { 
      "Name": "Enron", 
      "StartDate": "1/1/1995" 
     }, 
     { 
      "Name": "Amazon", 
      "StartDate": "1/1/1999" 
     } 
     ] 
    }, 
    { 
     "Name": "Jane Doe", 
     "Age": 30, 
     "Employers": [ 
     { 
      "Name": "Joe's Crab Shack", 
      "StartDate": "1/1/2007" 
     }, 
     { 
      "Name": "TGI Fridays", 
      "StartDate": "1/1/2010" 
     } 
     ] 
    } 
    ] 
} 

は、私が代わりに戻って取得するクエリに追加できるものはありますクライアント側では、私の使用例では、フィールド名がデータに比べて非常に大きいので、これらの名前をすべて転送せず、変換を実行するクライアントでCPUサイクルを費やすこともありません。フォーマットが自分の望むものでなければならないことを示す独自のカスタムパラメータを用意する前に、標準化された方法がないかどうかを確認したいと思っていました。

+0

に含めるプロパティのサブセットを選択することで、必要なフィールドだけを選んで$桜にオプションを選択しを使用することができます services.odata.org/OData/OData.svc/Categories(1)/Products(1)/Supplier/Address/City/$value

異なる種類の値。これは一般的に私がやることではありません。私の意見では、それはあなたのAPIを傷つけるでしょう。 送信されるデータが少なくなります。しかし、それはまた、クライアントが前提を作らなければならない、あまり明確ではないAPIをもたらすでしょう(Employers Array内の配列の最初のフィールドは、日付のように見えない場合は名前でなければなりません)。 それが働きにくくなると、クライアントは具体的に雇用者の名前やStartDateを取得するだけでは不十分です。 – ophychius

+0

合意。私はこの形式を標準のOData APIから明示的に要求する方法を探していますが、この形式をAPI自体の一部ではない*ために使用します。つまり、この形式を決定する同じクライアントが1つは結果を解釈する。 FWIW、私の実際のユースケースは、グラフのX、Y値で構成されています。 {timestamp:12345、value:77}のようなオブジェクトの配列の代わりに、私は[12345,77]のようなタプルの配列を受け取りたいと思います。 –

答えて

0

ODataには、レスポンスに含めるデータとメタデータの量を制御するオプションがいくつか用意されています。

V4のOData では、Acceptヘッダパラメータ(ドキュメントhereを確認してください)にodata.metadata=minimalを追加することができます。これはデフォルトの動作ですが、この場合でも、応答にはフィールド名が含まれており、正当な理由があります。

フィールド名なしの値だけを送信する理由がわかりますが、応答構造の意味的意味が変更されることに注意してください。クライアント側のjsonレコードとして対処するのは直感的ではありません。

だからあなたの質問に答えるために、答えは、「NO」

その他のオプション応答サイズを最小にするためである。

あなたは ODataのオプションは、生の値を取得するために$値を使用することができます単一のプロパティ。 チェックこの例:また、あなたは配列を作成し、ご希望の出力に応答

+0

ありがとうございます。残念ながら(afaik)$ valueキーワードは単一の値でしか動作しませんが、配列内の複数の値を変換できるものを探しています。基本的に 'result.map(obj => [obj.Name、obj.StartDate])'と同等です。 –

+0

あなたは正しいです。単一の値に対してのみ機能します。私はODataのドキュメントを詳しく見て、odata.metadata = minimal形式のパラメータを見つけました。また、あなたの質問に対する答えは「いいえ」であり、私は改訂された回答に記載されているように、正当な理由のために示唆しています。 – Yoram

+0

それを調べていただきありがとうございます。別のコメントに対する私の回答で言及したように、返されるもののフォーマットを指定するクライアントのように、私は直感的ではないレスポンスフォーマットについてあまり心配していません。デフォルトの応答は引き続き標準となります。 –

関連する問題