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

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

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

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

JSON

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

Unity

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1257閲覧

jsonの値がコードの値に当てはまらない

Yukirr4_

総合スコア728

C#

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

JSON

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

Unity

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/04/26 12:19

編集2020/04/27 01:12

こちらを参考にjsonをデシリアライズしようとしているのですが、structに代入されません。

json

1{ 2 "items":[ 3 { 4 "a" : "A", 5 "b" : "B", 6 "c" : "C", 7 "d" : 1, 8 }, 9 { //..//省略 } 10 //...........大量に続く 11}

これらの値を以下のコードに代入させたいです。
itemの構造体を作り、それを配列にさせています。

C#

1[System.Serializable] 2public struct itemslist 3{ 4[System.Serializable] 5public struct items 6{ 7 public string a; 8 public string b; 9 public string c; 10 public int d; 11} 12 13items[] item; 14} 15 16void Start() 17{ 18 FileInfo info = new FileInfo(Application.streamingAssetsPath + "json.json"); 19 StreamReader reader = new StreamReader(info.OpenRead()); 20 string json = reader.ReadToEnd(); 21 itemlist data = JsonUtility.FromJson<itemlist>(json); 22 23 Debug.Log(json); //正しく出力されている 24 Debug.Log(data.item.a); //エラー 25}

途中まで(jsonの取得)はうまくいっているので、代入がうまくいってないんだと思いますが、
これ以外に解決策が思いつかないので質問させていただきました。


**Debug.Log(data.item.a)**でのエラー内容

NullReferenceException: Object reference not set to an instance of an object


どこに問題があるのでしょうか。
どなたか回答お願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

構造体定義が間違っているのではないでしょうか?

C#

1[System.Serializable] 2public struct itemlist 3{ 4 [System.Serializable] 5 public struct item 6 { 7 public string a; 8 public string b; 9 public string c; 10 public int d; 11 } 12 13 public item[] items; 14} 15

こうじゃないですかね?
また、デバッグでの表示のさせ方も間違っています。
itemは配列です(上記の修正ではitemsですが)のでitem.aといった記述ではなくitem[0].aといった書き方になるかと思います。

投稿2020/04/27 02:32

YAmaGNZ

総合スコア10489

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

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

0

配列の名前とjsonのrootの名前が異なっていました。

jsonの"items"を"item"に変更したらうまくいきました。

投稿2020/04/27 02:27

Yukirr4_

総合スコア728

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

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

YAmaGNZ

2020/04/27 02:36

その修正の方法ですと、変数名や構造体名と実体が一致せずややこしいことになりませんかね? items構造体は複数形の名称なのに1つのアイテムの情報を格納する構造体ですし、 items[] itemと複数のアイテムの情報を格納する変数なのに、単数形の名称だったりしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問