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

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

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

OpenPose

OpenPoseとは、深層学習を使って人の体や指などの位置(座標)や向きといったポーズを可視化する技術。関節点など人の体における特徴点が座標のどこにあるかを検出することができます。高性能プロセッサを使えば動画像内の複数の人物もリアルタイムで検出することが可能です。

C#

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

JSON

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

Q&A

解決済

2回答

1850閲覧

Jsonファイルを取り込みたいです

namekuhito

総合スコア21

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

OpenPose

OpenPoseとは、深層学習を使って人の体や指などの位置(座標)や向きといったポーズを可視化する技術。関節点など人の体における特徴点が座標のどこにあるかを検出することができます。高性能プロセッサを使えば動画像内の複数の人物もリアルタイムで検出することが可能です。

C#

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

JSON

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

1グッド

3クリップ

投稿2019/08/06 07:49

編集2019/08/06 08:30

OpenPoseで得られたresult_jsonの結果をC#で取り込みたいです。

{"version":1.2,"people":[{"pose_keypoints_2d":[343.339,560.812,0.70107,413.923,715.622,0.129554,198.376,715.582,0.176477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,317.87,488.353,0.778215,423.633,498.118,0.798372,0,0,0,556.841,535.336,0.763956,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]}

以上のデータ形式を取り込みたいです。
また、これらのデータは別のフォルダに存在しているので、ファイルからデータを読み、配列などを用いて"pose_keypoints_2d"の値をひとつひとつ抽出して使いたいです。

よろしくお願いします。

Json.NETやDynamicjsonは試したので、環境はそろっていると思います。

hogedesu👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

これを試してみてください。

C#

1using System; 2using Newtonsoft.Json; 3 4namespace Etude 5{ 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 string json = @"{""version"":1.2,""people"":[{""pose_keypoints_2d"":[343.339,560.812,0.70107,413.923,715.622,0.129554,198.376,715.582,0.176477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,317.87,488.353,0.778215,423.633,498.118,0.798372,0,0,0,556.841,535.336,0.763956,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],""face_keypoints_2d"":[],""hand_left_keypoints_2d"":[],""hand_right_keypoints_2d"":[],""pose_keypoints_3d"":[],""face_keypoints_3d"":[],""hand_left_keypoints_3d"":[],""hand_right_keypoints_3d"":[]}]}"; 11 dynamic o = JsonConvert.DeserializeObject(json); 12 foreach (var a in o.people[0].pose_keypoints_2d) 13 { 14 Console.WriteLine(a); 15 } 16 } 17 } 18}

投稿2019/08/06 08:03

Zuishin

総合スコア28660

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

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

namekuhito

2019/08/06 08:22

回答ありがとうございます。 すみません、書き方が悪かったのですが、JSONファイルが他のファルダ内にある為 ファイルの入出力と同時に行いたいです。 その場合は、どうすればいいですか?
Zuishin

2019/08/06 08:31

ファイルの読み込み方がわからないということですか? 読み込んだ後は文字列になるので、この方法が使えると思います。
Zuishin

2019/08/06 08:41 編集

まずはこれでうまくいくかどうかを確かめてください。確かめることができたら、あとはファイルからこの文字列を復元できるかだけの問題になります。
namekuhito

2019/08/06 08:33

教えて頂いたコードは、うまく動作しました。ありがとうございます。
namekuhito

2019/08/06 08:35

ファイルからの読み込み方が分からないです。 steamやfilesteamなどを使ってみたのですが、うまくいきませんでした。
namekuhito

2019/08/06 08:38

分かりました。ありがとうございました。
guest

0

すでに解決済みになっているのに何ですが・・・

JSON 文字列をベースに C# のクラスを定義して、そのクラスのオブジェクトにデシリアライズするのが扱いやすいと思います。

例えば、以下の変換サービスで、質問に書いてあった JSON 文字列を C# のクラスの変換すると、

json2csharp
http://json2csharp.com/

以下のようになります。

public class Person { public List<double> pose_keypoints_2d { get; set; } public List<object> face_keypoints_2d { get; set; } public List<object> hand_left_keypoints_2d { get; set; } public List<object> hand_right_keypoints_2d { get; set; } public List<object> pose_keypoints_3d { get; set; } public List<object> face_keypoints_3d { get; set; } public List<object> hand_left_keypoints_3d { get; set; } public List<object> hand_right_keypoints_3d { get; set; } } public class RootObject { public double version { get; set; } public List<Person> people { get; set; } }

Newtonsoft.Json を使って以下のように RootObject 型オブジェクトにデシリアライズできます。

RootObject rootObject = JsonConvert.DeserializeObject<RootObject>("質問の JSON 文字列");

後はプロパティをたどって pose_keypoints_2d の値をひとつひとつ読み出していくのは容易にできます。

投稿2019/08/06 09:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

namekuhito

2019/08/09 05:54

回答ありがとうございます。遅くなって恐縮なのですが、プロパティをたどるとはどうやればいいですか?
退会済みユーザー

退会済みユーザー

2019/08/09 07:23

回答に書いたクラスとプロパティの定義を見れば容易に分かると思ったのですが・・・ rootObject.people で List<Person> 型のオブジェクトへの参照が取得できるのは分かりますか? 今回の質問にかかれた JSON 文字列では、List<Person> の中の Person は一つしかないですが、複数あるのが前提のようですので foreach ループで Person を一つずつ取得して、その中の目的の要素を Person クラスのプロパティを使って取得できます。
namekuhito

2019/08/09 07:44

すみません、rootObject.peopleが複数であることから、[]を用いて指定するのを忘れて上手くいきませんでした。 ありがとうございます!
KOZ6.0

2019/08/09 11:49

実はですね、2015 か 2017 からだったかと思いますが、Visual Studio にも JSON をクラスに変換する機能があるのです。 コードエディタを表示して、メニューから「編集」→「形式を選択して貼り付け」→「JSON をクラスとして貼り付ける」 DataContractJsonSerializer っていう .NET 標準のクラスもあります。 https://docs.microsoft.com/ja-jp/dotnet/framework/wcf/feature-details/how-to-serialize-and-deserialize-json-data 豆知識でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問