AndroidでオブジェクトをJSONに変換する


回答:


271

ほとんどの人がgsonを使用しています:これを確認してください

Gson gson = new Gson();
String json = gson.toJson(myObj);

15
そしてジャクソンも。
Mob

4
なぜtoJsonの埋め込みメソッドがないのですか?しかし、私たちはfromJsonを持っていますか?
Mは

彼らが持っているgsonを使ってみてください。
グムル

57
public class Producto {

int idProducto;
String nombre;
Double precio;



public Producto(int idProducto, String nombre, Double precio) {

    this.idProducto = idProducto;
    this.nombre = nombre;
    this.precio = precio;

}
public int getIdProducto() {
    return idProducto;
}
public void setIdProducto(int idProducto) {
    this.idProducto = idProducto;
}
public String getNombre() {
    return nombre;
}
public void setNombre(String nombre) {
    this.nombre = nombre;
}
public Double getPrecio() {
    return precio;
}
public void setPrecio(Double precio) {
    this.precio = precio;
}

public String toJSON(){

    JSONObject jsonObject= new JSONObject();
    try {
        jsonObject.put("id", getIdProducto());
        jsonObject.put("nombre", getNombre());
        jsonObject.put("precio", getPrecio());

        return jsonObject.toString();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return "";
    }

}

1
私はこの方法を好む、各オブジェクトには独自のstringifyメソッドがあります。洞察をありがとう!
Bhimbim 2017

10

より良い選択かもしれません:

@Override
public String toString() {
    return new GsonBuilder().create().toJson(this, Producto.class);
}

なぜこれがより良い選択なのですか?
Neria Nachum

1
オブジェクトをJSON文字列に変換できるようにしたいということは、必ずしもオブジェクトの文字列表現を常にJSONにすることを意味するわけではありません。
Thizzer

@NeriaNachum、たくさんの属性を持つクラスを持っていると答えたとき、それは私の心の中にありました。そのtoString()メソッドをオーバーライドすると、Android StudioまたはIntelliJ Ideaによって生成されたデフォルトの方法で印刷すると、多くのStringオブジェクトが作成されますが、これは1行のコードであり、GsonBuilderの機能を使用しています。
Hesam 2016年

@Thizzer、あなたは絶対的に正しいです。開発者(少なくともアプローチに慣れていない人)に共有されて見られるのは良いことだと思っていました。その後、必要なときに使用します。
Hesam 2016年

モデル自体から変換を処理でき、実装を抽象化できるため、私もこれがより良い選択だと感じています。
adnaan.zohran

4

Spring for AndroidはRestTemplateを使用してこれを簡単に実行します。

final String url = "http://192.168.1.50:9000/greeting";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Greeting greeting = restTemplate.getForObject(url, Greeting.class);

Jackson Jarがクラスパスにある場合、MappingJackson2HttpMessageConverterをRestTemplateに追加する必要はありません。クラスパスに自動的に追加されます。
Klaus Groenbaek

2

Android 3.0(APIレベル11)以降、Androidにはより新しく改善されたJSONパーサーがあります。

http://developer.android.com/reference/android/util/JsonReader.html

JSON(RFC 4627)でエンコードされた値をトークンのストリームとして読み取ります。このストリームには、リテラル値(文字列、数値、ブール値、およびnull)と、オブジェクトおよび配列の開始および終了の区切り文字の両方が含まれます。トークンは、深度順でトラバースされます。これは、JSONドキュメントに現れるのと同じ順序です。JSONオブジェクト内では、名前と値のペアは単一のトークンで表されます。


1
これは求められたのとは正反対です。
マシューは

2

ライブラリGradleをダウンロードします。

compile 'com.google.code.gson:gson:2.8.2'

メソッドでライブラリを使用します。

Gson gson = new Gson();

//transform a java object to json
System.out.println("json =" + gson.toJson(Object.class).toString());

//Transform a json to java object
String json = string_json;
List<Object> lstObject = gson.fromJson(json_ string, Object.class);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.