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

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

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

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

JSON

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

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

2554閲覧

JSONを取得できない。

konnnichiha

総合スコア1

C#

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

JSON

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

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/03/31 12:11

編集2021/03/31 12:16

質問

超絶初心者です。
C#で緊急地震速報を通知するものを作ろうと思い、現在作っています。
https://api.iedred7584.com/eew/
こちらのapiからjsonを取得しようとしているのですが、ここで問題があります。
例えば、表の上から3番目の
Title.Code
の項目を取得しようすると、 . があり、正しく認識されません。
変数に代入されません。
どうすればいいのでしょうか?

該当のソースコード

C#

1//Program.cs 2using System; 3using System.Net.Http; 4using Newtonsoft.Json; 5 6 7namespace EEW 8{ 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 var url = $"https://api.iedred7584.com/eew/json/"; 14 var client = new HttpClient(); 15 var json = client.GetStringAsync(url).Result; 16 var eew = JsonConvert.DeserializeObject<EEW>(json); 17 var 取得結果 = eew.ParseStatus; 18 var 予報or警報 = eew.Title; 19 Console.WriteLine("ここだよー" + 予報or警報); 20 21 22 } 23 } 24}

C#

1//EEW.cs 2using System; 3using System.Collections.Generic; 4using System.Text; 5 6namespace EEW 7{ 8 public class EEW 9 { 10 public string ParseStatus { get; set; } 11 public string Title { get; set; } //ここどうすればいいのでしょうか。 12 13 } 14}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/03/31 21:00

質問者さん、無言ですが、回答がついているのでそれらに対するフィードバックを書きましょう。一旦ベストアンサーを付けて解除したようですが、回答が問題解決につながらなかったということ? であれば、どこがダメだったのかを書いてもらえると、よりピンポイントな解決策が出てくるかも。とにかく無言は NG です。
konnnichiha

2021/04/01 12:17

すみません、私用で少し見られませんでした。 回答ありがとうございました。
guest

回答2

0

ベストアンサー

以下の記事のように Visual Studio の機能を利用して JSON 文字列から C# のクラス定義を作成して、JSON 文字列をそれにデシリアライズしてみてください。

JSON 文字列から C# のクラス定義生成
http://surferonwww.info/BlogEngine/post/2020/05/10/generate-class-definition-from-json-string.aspx

【2021/4/1 9:55 追記】

https://api.iedred7584.com/eew/json/ から取得できる JSON 文字列から、上の記事で紹介したように VS2019 の機能を使って C# のオブジェクトを生成すると以下のようになります。

自動生成されたクラス名の Rootobject だけ EarthQuake に変えました。(使った既存のサンプルの他のコードとダブるので)

namespace NewtonsoftJson // ・・・中略・・・ public class EarthQuake // Rootobject から変更 { public string ParseStatus { get; set; } public Title Title { get; set; } public Source Source { get; set; } public Status Status { get; set; } public Announcedtime AnnouncedTime { get; set; } public Origintime OriginTime { get; set; } public string EventID { get; set; } public Type Type { get; set; } public int Serial { get; set; } public Hypocenter Hypocenter { get; set; } public Maxintensity MaxIntensity { get; set; } public bool Warn { get; set; } public Option Option { get; set; } public string OriginalText { get; set; } } public class Title { public int Code { get; set; } public string String { get; set; } public string Detail { get; set; } } public class Source { public int Code { get; set; } public string String { get; set; } } public class Status { public string Code { get; set; } public string String { get; set; } public string Detail { get; set; } } public class Announcedtime { public string String { get; set; } public int UnixTime { get; set; } public string RFC1123 { get; set; } } public class Origintime { public string String { get; set; } public int UnixTime { get; set; } public string RFC1123 { get; set; } } public class Type { public int Code { get; set; } public string String { get; set; } public string Detail { get; set; } } public class Hypocenter { public int Code { get; set; } public string Name { get; set; } public bool isAssumption { get; set; } public Location Location { get; set; } public Magnitude Magnitude { get; set; } public Accuracy Accuracy { get; set; } public bool isSea { get; set; } } public class Location { public float Lat { get; set; } public float Long { get; set; } public Depth Depth { get; set; } } public class Depth { public int Int { get; set; } public string String { get; set; } } public class Magnitude { public float Float { get; set; } public string String { get; set; } public string LongString { get; set; } } public class Accuracy { public Epicenter Epicenter { get; set; } public Depth1 Depth { get; set; } public Magnitude1 Magnitude { get; set; } public int NumberOfMagnitudeCalculation { get; set; } } public class Epicenter { public int Code { get; set; } public string String { get; set; } public int Rank2 { get; set; } public string String2 { get; set; } } public class Depth1 { public int Code { get; set; } public string String { get; set; } } public class Magnitude1 { public int Code { get; set; } public string String { get; set; } } public class Maxintensity { public string From { get; set; } public string To { get; set; } public string String { get; set; } public string LongString { get; set; } } public class Option { public Change Change { get; set; } } public class Change { public int Code { get; set; } public string String { get; set; } public Reason Reason { get; set; } } public class Reason { public int Code { get; set; } public string String { get; set; } } }

上のクラス定義を使って以下のようにデシリアライズできます。(画像に出てくる NewtonsoftJson というのは名前空間名です)

イメージ説明

投稿2021/03/31 12:27

編集2021/04/01 00:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Titlestringではなく、Code, String, Detailプロパティ(Codeはint、他2種類はstring)を含むクラスにしてみましょう。
また、以下の実際に返されるjsonを見てみるのも良いでしょう。

緊急地震速報json


2020/04/01
型が誤っていたので、修正しました。
失礼しました。

投稿2021/03/31 12:24

編集2021/04/01 13:34
takapi_cs

総合スコア349

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

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

退会済みユーザー

退会済みユーザー

2021/04/01 01:03

JSON 文字列は "Title":{"Code":37, ... となっているので、Code は int 型ですね。詳しくは上の私の回答のクラス定義を見て下さい。
takapi_cs

2021/04/01 13:30

すみません、誤っておりました。 失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問