web-dev-qa-db-ja.com

ODATAからjson形式を返す方法は?

ODATAはjsonを返すことができますが、属性またはインターフェイスを使用して返す必要があるかどうかはわかりません。

http://odata.netflix.com/Catalog/Titles ?$ format = JSONのようにしますが、odataサービスはJSONを返しません。 www.foo.com/service?$format=jsonのように呼び出すと、XMLを返すだけです。

ODATAでjsonを返すにはどうすればよいですか?

27
wil

Fiddlerをダウンロードしてインストールします。

http://www.fiddler2.com/fiddler2/

インストールしたら、それを開き、Fiddlerの右側にある[リクエストビルダー]タブをクリックします。

次のURLを挿入:

http://test.com/feed2/ODataService.svc/results

?$ format = JSONは必要ないことに注意してください

[リクエストヘッダー]セクションで、次の行を挿入します。

accept: application/json

Fiddlerの右上にある大きな「実行」ボタンを押します。

Fiddlerの左側のリストに追加されたリクエストの結果が表示されます。

リクエストをダブルクリックします。 Fiddlerの右側が[インスペクター]タブに変わり、リクエストの結果を確認できます。

また、Jsonで作業しているので、おそらくFiddlerのJsonビューアプラグインをダウンロードしてインストールする必要があります。

http://jsonviewer.codeplex.com/

23
lamarant

WCF Data Servicesの新しいバージョンはデフォルトでJSONをサポートしているため、

Accept: application/json;odata=verbose

要求ヘッダー内。

Accept: application/json

もはや十分ではありません。詳細 こちら

13
Nate Cook

ここでは、誰もあなたの質問にとてもきれいに答えているわけではないようです!

HTMLページから、次のJavascript/JQueryコードを使用して、WCF Data ServiceからJSON形式でデータを返すことができます。

    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">

        var sURL = "http://YourService.svc/Books(10)";

        function testJSONfetch() {

            $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                datatype: "json",
                url: sURL,
                error: bad,
                success: good,
                beforeSend: function (XMLHttpRequest) {
                    //Specifying this header ensures that the results will be returned as JSON.
                    XMLHttpRequest.setRequestHeader("Accept", "application/json");
                }
            });

        }

        function good(response)
        {

        }

        function bad(response) 
        {

        }

    </script>
9
Oli Gray

リクエストヘッダーセクションに「Accept:application/json」を追加する必要があります。

チェックアウト このリンク

7
Glaxalg

Data ServicesのODATAプロバイダーを使用している場合は、指定したサンプルのようにURLで指定することで、ODATAをJSONとして簡単に返すことができます- http://odata.netflix.com/Catalog/Titles =?$ format = JSON

これを行うには、MSDNからADO.NET Data ServicesをダウンロードするためのJSONpおよびURL制御形式のサポートを使用します http://code.msdn.Microsoft.com/DataServicesJSONP を使用し、DataServiceクラスにJSONPSupportBehaviorデコレーターを追加します以下のように。

[JSONPSupportBehavior]
public class MyDataService : DataService<MyContextType>
{
     ...
4
zackdever

「... http://test.com/feed2/ODataService.svc/results ?$ format = JSON ...を使用して「Webページが見つかりません」と表示される」

uriに$ format = JSONは必要ありません。

http://test.com/feed2/ODataService.svc/results 」を使用するだけです

(要求ヘッダーにAccept:application/jsonが含まれる)

2
user4816271

遅い答えですが、OData APIをカールし、結果をjsonとして返す方法を見つけようとして最後の1時間を費やしてきました。次のコードは、jsonでドキュメントを取得し、ファイルに書き込みます。

-o myfile.html -H "Accept: application/json" http://example.com/api/data?$filter=name eq 'whatever'
1
user1781186

きれいではありませんが、これはリクエスト文字列で$ formatを使用せずにJSON出力を強制する方法です:

    Request r = new Request(Method.GET, "http://XXXXXXX.svc//Login"
                 + "&UserId=" + "'" + "user" + "'" 
                 + "&Password=" + "'" + "password" + "'");

    ClientInfo ci = r.getClientInfo();
    ArrayList<Preference<MediaType>> accepted = new ArrayList<Preference<MediaType>>();
    accepted.add(new Preference<MediaType>(MediaType.APPLICATION_JSON));
    ci.setAcceptedMediaTypes(accepted);

    Client client = new Client(Protocol.HTTP);  
    Response response = client.handle(r);  
    Representation output = response.getEntity();  
0
Steven Veltema

...小文字を使用します。

「format = json」

0
Radosław Kiela