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

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

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

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

3397閲覧

AndroidのJSONObjectに独自クラスを渡す方法

lonoru

総合スコア18

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/02/03 09:56

Sampleという独自クラスをJSONObjectのコンストラクタに渡して
toStringで文字列変換したい場合、
個別にダウンロードしたorg.json-20120521.jarなどでは
正常に変換されますが、Android.jarの持つorg.json.JSONObjectだと
エラーになってしまいます。

■正常な例

public class Sample { private String name = null; private int age = 0; public String getName(){ return this.name; } public void setName(String name){ this.name = name; } public int getAge(){ return this.age; } public void setAge(int age){ this.age = age; } }
Sample sample = new Sample(); sample.setAge(20); sample.setName("hoge"); JSONObject jobj = new JSONObject(sample); System.out.println(jobj.toString());

■結果

{"age":20,"name":"hoge"}

これと同じ実装をAndroidアプリに行うと

cannot resolve constractor 'JSONObject(Sample)'

と、そもそもエラーになってしまうのですが、
Androidが持つJSONObjectで独自クラスを
コンストラクタに渡すことはできないのでしょうか?

どなたかご存知のかたご教授お願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

自分でパース処理書くほど大袈裟なことが嫌なら、独自クラスをマップにコンバートする処理を書いた方が後々応用効いていいと思いますね。
と思ったら、JSONObjectって、文字列しか渡せないんですね。
独自クラス配列をjdon文字列に変換する処理は50行くらいで書けます。挑戦してみると良いですよ。
ヒント:リフレクションつかう、文字列中のいくつかの文字をエスケープする、文字列いがいのオブジェクトはクオートで囲まないorとりあえず全部クオートで囲む。instanceof で map/iterable インターフェースを判定して、配列処理とオブジェクト処理を分ける。
こんなとこですね。

投稿2016/02/03 14:28

ipadcaron

総合スコア1693

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

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

lonoru

2016/02/04 01:39

お二人のご回答により、独自クラスをMap変換してからJSONObjectに渡すことにしました。 ありがとうございました。
guest

0

独自クラスを渡すことはできません。
自分でパース処理を書く必要があります。

投稿2016/02/03 13:32

yona

総合スコア18155

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

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

lonoru

2016/02/04 01:38

やはり自分でパースするしかないんですね。。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問