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

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

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

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

Q&A

1回答

362閲覧

c♯におけるjsonデータの扱い方

ym87

総合スコア6

C#

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

0グッド

0クリップ

投稿2018/05/19 09:33

前提・実現したいこと

初質問です。よろしくお願いします。c♯初めて1週間程度の超初心者です。

c♯でjsonデータを読み込むプログラムを作成しているのですが、特定の情報だけを抽出するにはどうしたら良いのですか。

発生している問題・エラーメッセージ

こんな感じです。

using (var res = req.GetResponse()) using (var sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8)) { Debug.WriteLine(sr.ReadToEnd());

sr.ReadToEndの中身

{"statusCode":0,"message":"","time":0.5616009,"requestId":65,"result":[{"sentenceList":[{"textId":1,"text":"楽しい","sentence":[{"tango":"楽しい","hinshi":"形容詞","yomi":"タノシイ","bunPos":1}]}]}]}

yomiの行だけを配列かlistで格納したい。

該当のソースコード

c♯

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

c♯でjsonデータを読み込むプログラムを作成しているのですが、特定の情報だけを抽出するにはどうしたら良いのですか。

何らかのライブラリを使って JSON 文字列をデシリアライズして C# のオブジェクトに変換し、それから取得すれば良いと思います。

以下の記事は、HttpWebResponse / HttpClient を利用して応答を取得し、DataContractJsonSerializer クラスを利用して応答ストリームに含まれる JSON 文字列を C# のオブジェクトにデシリアライズしています。これが参考になりませんか?

HttpWebRequest で WCF サービスを呼出
http://surferonwww.info/BlogEngine/post/2017/03/26/request-wcf-service-method-by-using-httpwebrequest.aspx

HttpClient で WCF サービスを呼出
http://surferonwww.info/BlogEngine/post/2018/02/24/request-wcf-service-using-httpclient.aspx

前者の記事に書いてありますが、JSON 文字列から C# のクラス / プロパティ定義を得るには、以下の変換サービスが使えると思います。

json2csharp
http://json2csharp.com/

ちなみに、質問者さんが回答に書いた JSON 文字列を変換すると以下のようになります。

public class Sentence { public string tango { get; set; } public string hinshi { get; set; } public string yomi { get; set; } public int bunPos { get; set; } } public class SentenceList { public int textId { get; set; } public string text { get; set; } public List<Sentence> sentence { get; set; } } public class Result { public List<SentenceList> sentenceList { get; set; } } public class RootObject { public int statusCode { get; set; } public string message { get; set; } public double time { get; set; } public int requestId { get; set; } public List<Result> result { get; set; } }

投稿2018/05/19 14:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ym87

2018/05/21 03:32

回答ありがとうございます。どうよら出力はできたようなのですが、 ここから、どうやって”yomi”のデータを出力すればよいのですか。 初歩的な質問だと思うのですが申し訳ありません。
退会済みユーザー

退会済みユーザー

2018/05/21 03:41

デシリアライズした結果の C# のオブジェクト(上の例で言うと RootObject)は取得できたのですか? であれば、各クラスに定義されているプロパティをたどって yomi のデータは取得できるはずです。 その方法はホントに C# の基本のキですので、ご自分で調べてみてください。RootObject の取得まで自力でできたのであれば、ちょっと調べれば問題なくできると思うのですが・・・ RootObject の取得ができてないということなら話は別ですが、その場合はどこで躓いているか詳しく書いてください。
退会済みユーザー

退会済みユーザー

2018/05/23 04:20

誰? マイナス評価をした人。理由を書かないでそういうことをするのは卑怯ですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問