Android에서 객체를 JSON으로 변환


129

Android에서 객체를 JSON으로 변환하는 간단한 방법이 있습니까?

답변:


271

대부분의 사람들은 gson을 사용하고 있습니다 : 이것을 확인하십시오

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

15
또한 잭슨.
마피아

4
왜 toJson에 내장 된 방법이 없습니까? 그러나 우리는 fromJson을 위해 있습니까?
M at

그들이 가지고있는 gson을 사용하십시오.
gumuruh

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

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 객체가 만들어 지지만 이는 한 줄의 코드이며 GsonBuilder의 강력한 기능을 사용합니다.
Hesam

@Thizzer, 당신은 절대적으로 맞습니다. 나는 개발자 (적어도 접근에 익숙하지 않은 사람들)가 공유하고 보는 것이 좋다고 생각했습니다. 그런 다음 필요할 때마다 사용합니다.
Hesam

모델 자체에서 변환을 처리하고 구현을 추상화 할 수 있기 때문에 이것이 더 나은 선택이라고 생각합니다.
adnaan.zohran

4

Android 용 Spring은 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) 인코딩 값을 토큰 스트림으로 읽습니다. 이 스트림에는 리터럴 값 (문자열, 숫자, 부울 및 널)과 객체 및 배열의 ​​시작 및 끝 구분 기호가 모두 포함됩니다. 토큰은 JSON 문서에 표시되는 순서와 동일한 깊이 우선 순서로 순회됩니다. JSON 객체 내에서 이름 / 값 쌍은 단일 토큰으로 표시됩니다.


1
이것은 요청 된 것과 반대입니다.
Matthew 읽기

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.