質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

3回答

6674閲覧

Json.NETでJsonを識別したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2017/02/28 12:27

某有名サンドボックスゲームの外部ツールを開発しているのですが、サーバーから返されるJsonを識別する方法がわかりません。
MITライセンスを採用しているので、出来ればGPLライセンスに感染しているライブラリを使用したくないのです。

サーバーから返されるJsonは以下の2つです。

Json

1{ 2 "error", 3 "errorMessage" 4}

Json

1{ 2 "accessToken", 3 "clientToken", 4 "availableProfiles": [ 5 { 6 "id", 7 "name", 8 "legacy" 9 } 10 ], 11 "selectedProfile": { 12 "id", 13 "name", 14 "legacy" 15 } 16 17}

上のJsonが返されればログイン失敗、下ならば成功なのですが、どうやったらこの2つのJsonを識別できるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Jsonの書式は通常、"キー":"値" の形をとります。
なので、まともなサービスであれば、返されるJsonは例えば

JSON

1{ 2 "error":"true", 3 "errorMessage":"不正な操作です" 4}

のような形のはずです。
例えば上の形だと仮定すれば、Json.NETだと以下のようにエラーかどうか判定できると思います。

C#

1//適当にこんな感じでstringに読み込む 2string jsonString; 3var req = WebRequest.Create("http://xxxxx") as HttpWebRequest; 4using (var res = req.GetResponse()) 5using (var str = res.GetResponseStream()) 6using (var reader = new StreamReader(str)) 7{ 8 jsonString = reader.ReadToEnd(); 9} 10 11var json = JObject.Parse(jsonString); 12 13//error要素があればエラーとみなす 14var isError = json.SelectToken("error", false) != null;

本当にご提示ようなフォーマットなのであれば、
Json.NETではパースできない(例外になる)と思います。

投稿2017/02/28 13:16

oika

総合スコア425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。
「サーバから返されるJson」というのがJsonではないですね……
本当にそのレスポンスは正しいものですか?データがJsonのフォーマットに準拠していないため、世の中のJsonライブラリで読み込むことはできません。
一度サーバ側のAPIドキュメントを確認し、どのようにデータを扱えばいいのか調べてみてください。

投稿2017/02/28 13:01

tamoto

総合スコア4103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/01 08:05

おっと、ごめんなさい。コメントとか消すときに「ここも消したほうがいいかな・・・?」と思って消してしまいました・・・
tamoto

2017/03/01 09:14

おや。ということは、サーバから返されるデータは「正しいJson」ということでいいんでしょうか? それなら、まずはJSON.NETのチュートリアルを読んで、受信したデータを読み込むコードを書いてみましょう(oikaさんの回答が参考になります)。読み込むところまでいければ、その頃にはエラー状態と正常状態を見分けるコードの書き方も理解できていると思います。
退会済みユーザー

退会済みユーザー

2017/03/01 11:54

了解しました。
guest

0

こんにちは。

C# で JSON を処理するに記載されているDynamicJsonはよさそうな感じです。
ライセンスはMicrosoft Public License (Ms-PL)とのこと。リンク先によると、かなり緩いライセンスのようです。

投稿2017/02/28 12:58

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問