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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1999閲覧

jsonからJavaクラスオブジェクトに変換したい。

yutadd

総合スコア18

JSON

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/05/19 08:20

前提・実現したいこと

https://api.hypixel.net/skyblock/bazaar
のデータをシリアライズする方法を教えていただきたいです。
いくつかコードを書いて試してみましたが、うまくいきませんでした
試したコードはこんな感じです。

java

1class Model{ 2 @SerializedName("success") 3 String success; 4 @SerializedName("lastUpdated") 5 long lastUpdated; 6 @SerializedName("products") 7 Products products; 8 class Products{ 9 List<Product> products; 10 class Product{ 11 @SerializedName("product_id") 12 String product_id; 13 @SerializedName("sell_summary") 14 List<A_p_o> sell_sum; 15 @SerializedName("buy_summary") 16 List<A_p_o> buy_sum; 17 @SerializedName("quick_status") 18 Quickstats quick; 19 class A_p_o{ 20 @SerializedName("amount") 21 long amount; 22 @SerializedName("pricePerUnit") 23 double PricePerUnit; 24 @SerializedName("orders") 25 int orders; 26 } 27 } 28 class Quickstats{ 29 @SerializedName("productId") 30 String productId; 31 @SerializedName("sellPrice") 32 double sprice; 33 @SerializedName("sellVolume") 34 long svolume; 35 @SerializedName("sellMovingWeek") 36 long smoving_week; 37 @SerializedName("sellOrders") 38 int sorders; 39 @SerializedName("buyPrice") 40 double bprice; 41 @SerializedName("buyVolume") 42 long bvolume; 43 @SerializedName("buyMovingWeek") 44 long bmoving_week; 45 @SerializedName("buyOrders") 46 int borders; 47 } 48 } 49} 50StringBuilder sb=new StringBuilder(); 51sb.append(・・・); 52Model obj = new Gson().fromJson(sb.toString(),Model.class);

発生している問題・エラーメッセージ

しかしこの方法でシリアライズしてみたところ、products.products以降がnullになってしまいました。
もちろん、以下のようにいくつか商品名をハードコーディングしてみたところ、うまくはいきましたが、量が多いため、現実的でないと思い、避けたいと思います。

java

1class Model{ 2 @SerializedName("success") 3 String success; 4 @SerializedName("lastUpdated") 5 long lastUpdated; 6 @SerializedName("products") 7 Products products; 8 class Products{ 9 @SerializedName("BROWN_MUSHROOM") 10 Product brown; 11 @SerializedName("INK_SACK:3") 12 Product ink3; 13 class Product{ 14 @SerializedName("product_id") 15 String product_id; 16...

###そのため、現実的な形でデータをシリアライズする方法を教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

データを見ましたが、正直なところ、このJSONデータの設計に問題があると思います。

json

1{ 2 "success": true, 3 "lastUpdated": 1621418914403, 4 "products": { 5 "BROWN_MUSHROOM": { 6 "product_id": "BROWN_MUSHROOM", 7 "sell_summary": [...], 8 "buy_summary": [...], 9 "quick_status": {...}, 10 }, 11 "INK_SACK:3": { 12 "product_id": "INK_SACK:3", 13 ... 14 }, 15 ... 16}

本来はこうなっているべきです。

json

1{ 2 "success": true, 3 "lastUpdated": 1621418914403, 4 "products": [ 5 { 6 "product_id": "BROWN_MUSHROOM", 7 "sell_summary": [...], 8 "buy_summary": [...], 9 "quick_status": {...}, 10 }, 11 { 12 "product_id": "INK_SACK:3", 13 ... 14 }, 15 ... 16}

とはいえ、形式を直しようがないと思うので、 GSON では productsMap<String, Product> のように読み込ませれば良いと思います。
https://qiita.com/equines/items/aaa8cbc62f8e1fc3e5fd

投稿2021/05/19 10:28

mather

総合スコア6759

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

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

yutadd

2021/05/20 09:12

ありがとうございました!無事データを格納できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問