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

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

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

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

JSON

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

3366閲覧

Jsonの文字列をUnityでstring配列として読み込みたい

_Beginner

総合スコア103

C#

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

JSON

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/06/09 08:23

編集2019/06/09 08:29

Jsonについては完全に初心者です。以前他のゲームのJsonの値を変更する際に少し見たくらいです。

###やりたいこと
Unityで長い説明をいくつか表示したいのですが、
そのような長い文章はコンパイル時にC#のstringとして書くよりjsonなどを使って外部から取得したほうがいいと考えました(勝手な考えです。コードがぐちゃぐちゃになると思ったので...)。

###現在

現在Jsonはこのようになっています。ファイル名はStringAです。

json

1{ 2 "0": "長文1" 3 "1": "長文2" 4 "2": "長文3" 5 "3": "長文4" 6}

"長文n"はそれぞれそこに長文が書かれています。これでJsonの書き方があっているのかわかりませんが、とりあえずこの状態です。

###とりあえず組んでみたC#スクリプト

これらの長文をC#で取得したいです。
配列が良いと考えました(そのためにjsonのkeyを数字のみにしました)。

C#

1int _number = 0; 2string[] _text; 3void Start() 4{ 5 GetString(); 6 Debug.Log(_text[1]); 7 /*デバッグの結果を 長文2 にしたい*/ 8} 9 10void GetString() 11{ 12 /* ここでStringAから_textに配列として取得 13 例: _text[0] = "長文1", _text[2] = "長文3" という風に... */ 14}

調べてみたのですが、現在Unityには配列として取得する機能がないっぽいです。
上のようなことをしたいときにはどうすればいいのでしょうか?

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/06/09 09:01

> これでJsonの書き方があっているのかわかりませんが 合ってません。見直す余地はありますか?
_Beginner

2019/06/09 09:12

コメントありがとうございます。 できればJsonの記述も修正していただきたいです。 "StringA" : []でくくればいいのでしょうか?
退会済みユーザー

退会済みユーザー

2019/06/09 10:12 編集

JSON 文字列は自分の任意にできるのですか? であれば JSON 文字列側は何とでも目的に合うようにできると思いますが、問題は、 > 現在Unityには配列として取得する機能がないっぽいです。 です。Unity はほとんど知りませんが、デシリアライスに MiniJSON を使うのが定番のようです。使えますか?
guest

回答1

0

ベストアンサー

まず、JSON 文字列ですが、自分の任意にできるのであれば、以下のようにして、 

{"StringA":[ "長文1", "長文2", "長文3", "長文4" ]}

デシリアライズは MiniJSON を使って以下のようにすれば、

string text = "{\"StringA\":[\"長文1\",\"長文2\",\"長文3\",\"長文4\"]}"; Dictionary<string, object> dic = (Dictionary<string, object>)Json.Deserialize(text); var array = (List<object>)dic["StringA"]; foreach (object obj in array) { Console.WriteLine((string)obj); }

結果は以下のようになります。

長文1
長文2
長文3
長文4

投稿2019/06/09 10:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

_Beginner

2019/06/09 10:31

回答ありがとうございます。 僕も質問する前に一度MiniJSONの記事を見たのですが、 回答していただいたC#の方のコードの一行目のstringの宣言と定義のところで、長文を定義しているように見えるのですが、コードにできればその長文は書きたくないです。 僕の理解力がなくて把握できていないだけなのかもしれませんが、C♯の一行目についてよろしければ説明してもらえませんか。
退会済みユーザー

退会済みユーザー

2019/06/09 10:48

> C♯の一行目についてよろしければ説明してもらえませんか。 回答の上のコードに書いた JSON 文字列を text に代入しているのです。 > 僕の理解力がなくて把握できていない 失礼ながら実際そうで、C# の文法の基本的な知識がなくて話が通じないのだと思います。 C# の文字列は "" で囲いますが、"" の中の " は \" とエスケープしなければなりません。 上記が理解できなければ、掲示板で話が通じる程度には C# の文法を勉強してからでないと、文章のやり取りで解決するのはなかなか難しいと思います。
退会済みユーザー

退会済みユーザー

2019/06/09 11:01

半角のバックスラッシュと円記号は同じものですよ。``` と ``` で囲んだ場合、フォントの関係で、自分の環境ではバックスラッシュで表示されます。
_Beginner

2019/06/09 11:08

すみません。C#でstring内に\をつけて”をそのまま表すことは理解しています。 > JSON 文字列を text に代入しているのです 紹介していただいたコードだとtextに自ら代入しているようにしか見えないのです。textは最初無の状態で、0を呼ぶと長文1を返すようなものがしたいんです。 説明が下手ですみません…
退会済みユーザー

退会済みユーザー

2019/06/09 11:19

う~ん、全然理解できてないように見えます。 JSON 文字列がどこにあるのか知りませんが、何にせよそれをデシリアライズして C# で扱えるオブジェクトにしないことには、C# のコードでは何ともならないのは分かりますよね。 デシリアライズするのは Json.Deserialize() メソッドです。その ( ) の中に JSON 文字列を入れないとデシリアライズできないということは理解できますか?
退会済みユーザー

退会済みユーザー

2019/06/09 11:22

たぶん、 > そのような長い文章はコンパイル時にC#のstringとして書くよりjsonなどを使って外部から取得したほうがいいと考えました というのがそもそもの考え違いではなかろうかという気がしています。
YAmaGNZ

2019/06/09 12:15

ただ単にサンプルとしてコード上でJSONデータを与えているだけなのを、ファイルから読み込みたいからそいうことではないと思っているだけでしょう。 サンプルはJSONデータをどうやってデコードするかのサンプルであり、どのようにJSONデータを用意するかのサンプルではありません。 ですので、質問者さんが好きなようにJSONデータを用意すればいいだけです。
退会済みユーザー

退会済みユーザー

2019/06/09 12:51 編集

YAmaGNZ さん、横レスは回答の間違いの指摘とかならば有り難いですが、そうでなければご自分の回答をご自分の回答欄に書いていただければと思います。
退会済みユーザー

退会済みユーザー

2019/06/09 13:14

質問者さん> タイトルの、 > Jsonの文字列をUnityでstring配列として読み込みたい が目的と思って JSON を使うことを前提にレスしましたが、ひょっとして、真の目的は「文字列を C# のコードにハードコーディングしたくないので、外部から取得できるようにしたい」ということですか? であれば、その「外部」というのは具体的に何を考えてますか? テキストファイル? Settings ファイル? リソースファイル? Web API? Web API 以外は JSON である必要はさらさらないと思うのですが。
_Beginner

2019/06/09 13:26 編集

SurferOnWwwさん、そのひょっとしてです。僕がもっと良い言い方をしていればよかったのですが... 外部というのは正直、文字を取得させてC#上で配列にできればどれでもいいと思っています。 シリアライズに関して(C#に関しても)初心者なのでよくわからないのですが、JSONを推していた理由はよく軽いと言われているから、それだけです。
退会済みユーザー

退会済みユーザー

2019/06/09 13:34

そういうことですと、質問の仕方が大変マズいです。生半可な知識で JSON に決め打ちするのは止めましょう。XY 問題になってますよ。 外部というのが Web API とかである必要はなくて、ローカルの PC の中で取得できるファイルとかなら、JSON 形式などではなく、普通に文字列を改行で分けたテキストファイルを使った方が、デシリアライズが不要な分軽いはずです。
退会済みユーザー

退会済みユーザー

2019/06/09 13:41

もし、真の目的である「文字列を C# のコードにハードコーディングしたくないので、外部から取得できるようにしたい」ということを実現するにはどうしたらよいかを質問したいということであれば、このスレッドの表題とは話が変わってきているので、ここはクローズして、新に別のスレッドを立てて質問していただくようお願いします。
_Beginner

2019/06/10 11:21

XY問題という言葉もあるんですね。それについて調べてみたらまさにこの状態のことでした。 こちらはクローズして新たに質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問