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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

899閲覧

C#(Unity)でjson形式のデータから配列データを抜き取りたい

marisayuxtukuri

総合スコア21

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2022/06/15 08:03

編集2022/06/15 08:18

サーバーを立て、サーバー内に[1,2,3,4,5,6,7,8]という配列があります。それをUnityからPost通信で取得すると以下のように返ってきます。

data

1{ 2 "RETURN": [ 3 1, 4 2, 5 3, 6 4, 7 5, 8 6, 9 7, 10 8 11 ] 12}

この状態から[1,2,3,4,5,6,7,8]を取り出し、各要素を個別で取り出せるようにしたいです。
試したコードは以下のコードです。「request.downloadHandler.text」は上のdataです。

C#

1Dictionary<string, object> response = Json.Deserialize(request.downloadHandler.text) as Dictionary<string, object>; 2int a = response["RETURN"][1]; 3Debug.Log(a);

希望する出力は2ですが、以下のようなエラーが出ました。

error CS0021: Cannot apply indexing with [] to an expression of type 'object'

「object型には[]は使えない」と書かれていて「Dictionary<string, object> response = Json.Deserialize(request.downloadHandler.text) as Dictionary<string, object>;」の「<string, object>」の部分を直せばよさそうな気がしますがそれがわかりません。
よろしくお願いいたします。

追記:
使っているライブラリは以下のとおりです。

using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; using System.Text; using MiniJSON;

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

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

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

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

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

bboydaisuke

2022/06/15 08:09

逆シリアライズのために使っているライブラリの名前が書いてませんが、Unity 組み込みの UnityEngine.JsonUtility ではありませんよね。
marisayuxtukuri

2022/06/15 08:09

試したコードで出てほしい出力は2と出てほしいです。
marisayuxtukuri

2022/06/15 08:10

bboydaisuke様 はい、その通りです。以下が使っているライブラリです。 using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; using System.Text; using MiniJSON;
退会済みユーザー

退会済みユーザー

2022/06/15 08:15

MiniJson を使っている件、質問欄を編集して追加情報として追記してください。
marisayuxtukuri

2022/06/15 08:16

SurferOnWww様 ありがとうございます。編集いたします。
退会済みユーザー

退会済みユーザー

2022/06/15 08:19

たぶんキャストしないとダメだと思います。
marisayuxtukuri

2022/06/15 08:24

SurferOnWww様 ありがとうございます。 object型からどのようにキャストすればよいでしょうか。
退会済みユーザー

退会済みユーザー

2022/06/15 08:27

MiniJson では response["RETURN"] は object 型として返ってくると思いますが、それを int[] にキャストしたらどうなりますか?
marisayuxtukuri

2022/06/15 08:39

object型からint型のリストにキャストするやり方が調べてみたのですがわからないです。
退会済みユーザー

退会済みユーザー

2022/06/15 08:44

> object型からint型のリストにキャストするやり方が調べてみたのですがわからないです。 int 型ではなくて Int[] 型 (int の配列) にキャストしてください。キャストは C# の基本のキです。勉強してください。 int[] array = (int[])response["RETURN"];
marisayuxtukuri

2022/06/15 08:53

ありがとうございます。もっと勉強します。 試した結果以下のエラーがでました。 「InvalidCastException: Specified cast is not valid.」
退会済みユーザー

退会済みユーザー

2022/06/15 08:55

今試せる環境がないので後で検証してみます。
marisayuxtukuri

2022/06/15 08:56

ありがとうございます。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2022/06/15 14:33

検証してみました。コメントで書いた int[] array = (int[])response["RETURN"]; ではダメでした。すみません。ここでは画像は貼れないので、どうすればよいかを回答欄に書いておきます。
guest

回答2

0

質問のコメント欄の私の 2022/06/15 23:33 のコメントで「ここでは画像は貼れないので、どうすればよいかを回答欄に書いておきます」と書いた件です。

以下の画像を見ればどのようになっているかが分かると思います。

イメージ説明

投稿2022/06/15 14:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

marisayuxtukuri

2022/06/16 04:27

ありがとうございます。 いろいろ教えていただいてとても勉強になりました。
guest

0

ベストアンサー

MiniJSON を使っている理由はわかりませんが、標準の JSONUtility でもこうすればできます。

C#

1using System; 2using UnityEngine; 3 4public class Deserialize : MonoBehaviour 5{ 6 void Start() 7 { 8 string jsonText = ""; 9 jsonText += "{"; 10 jsonText += " \"RETURN\": ["; 11 jsonText += " 1,"; 12 jsonText += " 2,"; 13 jsonText += " 3,"; 14 jsonText += " 4,"; 15 jsonText += " 5,"; 16 jsonText += " 6,"; 17 jsonText += " 7,"; 18 jsonText += " 8"; 19 jsonText += " ]"; 20 jsonText += "}"; 21 var x = JsonUtility.FromJson<Data>(jsonText); 22 foreach (var e in x.RETURN) print(e); 23 } 24} 25 26[Serializable] 27class Data 28{ 29 public string[] RETURN; 30}

投稿2022/06/15 08:26

bboydaisuke

総合スコア5275

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

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

marisayuxtukuri

2022/06/15 08:42

ありがとうございます。 無事うまくいきました。
退会済みユーザー

退会済みユーザー

2022/06/15 08:53

> public string[] RETURN; JSON 文字列からすると string[] ではなくて int[] ではないかと思いますけど?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問