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

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

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

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

JSON

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

542閲覧

UnityでAWS S3 から取得した、Rekognition解析結果ログ入り Jsonファイルから、値を抽出したい

kazuh1r010

総合スコア23

C#

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

JSON

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/05/25 09:18

こんにちは、私は、現在UnityでAWS サービスを使って画像認識した
情報を取得しようとしています。

S3へPOSTするのをトリガーにRekognitionで
解析した結果をS3へログで保存し、
UnityでそのJsonファイルを読み込むまで、できていますが、
読み込んだJson形式の仕様の影響か、
欲しい値が抽出できません。

S3からJsonファイルを取得し、欲しい値を抽出して、表示しようとしている部分のプログラム

C#

1 public void GetObject(string filename) 2 { 3 FileName = filename; 4 5 Client.GetObjectAsync(S3BucketName, FileName, (responseObj) => 6 { 7 string data = null; 8 var response = responseObj.Response; 9 if (response.ResponseStream != null) 10 { 11 using (StreamReader reader = new StreamReader(response.ResponseStream)) 12 { 13 data = reader.ReadToEnd(); 14 } 15 16 JSONObject json = new JSONObject(data); 17 18 JSONObject facedetail = json.GetField("FaceDetails");//ここがNULLでエラーになります 19 JSONObject faceinfo = facedetail.GetField("Smile"); 20 21 Debug.Log(faceinfo.GetField("vlaue").str); 22 Debug.Log(faceinfo.GetField("Confidence").str); 23 24 //FaceData facedata = JsonUtility.FromJson<FaceData>(json); 25 //Debug.Log(facedata.Smile); 26 27         //string smile; 28 //var jsonData = Json.Deserialize(json) as Dictionary<string, object>;//一層目 29 //Debug.Log(jsonData); 30 //var FaceDetails =jsonData["FaceDetails"] as Dictionary<string, object>; 31 // Debug.Log(FaceDetails); 32 //smile = (string)FaceDetails["Smile"]; 33 //Debug.Log(smile); 34 35 } 36 else 37 { 38 Debug.Log("miss"); 39 } 40 }); 41 }

試したこと

上記の様に、JSONObject、また、コメントアウト部分の様に、JsonUtility、MiniJSONなど試しましたが、うまく取得できませんでした。。

取得Jsonファイル中身

https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/faces.html 
上記URLのDetectFaces API コールのレスポンスが中身になります。試しに抽出しようとしているのが「FaceDetails」中身の「Smile」のvalue,Confidenceです。

どなたか、上記のJson形式でも抽出できる方法がお分かりになられる方、ご教授よろしくお願いいたします。
別のアプローチなどで解決できそうな場合も教えていただければ幸いです。(うっすら考えているのがLamda上のPythonコードで書き換えてしまうなど)
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

自己解決されたとのことですが、記載します。

JSON

1{ 2 "FaceDetails": [ //←注目 3 { 4 // …(中略) 5 "Smile": { 6 "Confidence": number, 7 "Value": boolean 8 }, 9 // …(中略) 10 } 11 ], //←注目 12 "OrientationCorrection": "string" 13}

この場合、"FaceDetails"は、[]で囲まれているので、配列です(中身が1つしかないけど)。

なので、以下のようにすれば、よろしいかと思います。

C#

1 JSONObject json = new JSONObject(data); 2 3 JSONObject facedetail = json.GetField("FaceDetails"); 4 // FaceDetailsの配列の0番目のSmileを取得 5 JSONObject faceinfo = facedetail[0].GetField("Smile"); 6 7 // ~.strとするとnullになるので修正 8 Debug.Log(faceinfo.GetField("Value")); 9 Debug.Log(faceinfo.GetField("Confidence"));

投稿2018/05/25 10:45

fiveHundred

総合スコア9801

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

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

kazuh1r010

2018/05/27 03:08

回答ありがとうございます。上記のように修正したところ抽出することができました。 jsonから抽出する際の理解が深まりました。 こちらの方法が望ましいのでこちらを採用させていただきます! ありがとうございました!
guest

0

自己解決

自己解決しました!

読み取れる様に、多少強引ですが、以下のプログラムでjson内の文を
変更したところ抽出することができました。

C#

1data = data.Replace("\'", "\""); 2data = data.Replace("[", ""); 3data = data.Replace("]", "");

投稿2018/05/25 10:28

kazuh1r010

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問