안드로이드에서 Json 오브젝트를 보내고 파싱하는건 어떻게 하나요?


서버로부터 메세지를 Json 형식으로 보내고 Json형식으로 받아와 처리하려고 하는데요

아마 서버로부터 아래 형식으로 받아올 것 같은데 { "post": { "username": "someusername", "message": "this is a sweet message", "image": "http://localhost/someimage.jpg", "time": "present time" } }

이정도하려면 JSON에 대한 지식이 얼마나 있어야하죠? JSON을 보내고 받는 법 좀 가르쳐주세요.

  • 2016년 05월 27일에 작성됨

조회수 836


1 답변


좋아요
0
싫어요
채택취소하기

Json 기초는 http://luckyyowu.tistory.com/303 http://lonelycat.tistory.com/374

여기에 잘 설명 되있는 것 같습니다.

안드로이드에서 JSON을 파싱하고 받아오는 것은

 String str =
    "[{'username':'someusername','message':'this is a sweet message,'image':'http://localhost/someimage.jpg','time':'present time'},"+
    "{'username':'someusername','message':'this is a sweet message,'image':'http://localhost/someimage.jpg','time':'present time'}]";

이런식으로 String 객체에 보낼 데이터를 저장하고

JSONArray jarray = new JSONArray(str); JSONArray 객체에 저장합니다.

JSONArray 객체의 getJSONObject(i) 메소드로 child object 들을 차례대로 추출 이때 child 의 개수는 length() 메소드로 체크 가능. 추출된 child object 들은 JSONObject 로 받습니다.

for(int i=0; i < jarray.length(); i++){
    JSONObject jObject = jarray.getJSONObject(i);  // JSONObject 추출
     .....
}

각 JSONObject 객체에서 get*("~~") 메소드를 통해 '값' 을 받습니다. 이때 get* 메소드의 매개변수는 '키'값 입니다.

String address = jObject.getString("address");
String name = jObject.getString("name");
int age = jObject.getInt("age");

MainActivity 내용은 다음과 같습니다.

public class MainActivity extends ActionBarActivity {

    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView)findViewById(R.id.tvResult1);
        Button b = (Button) findViewById(R.id.button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                doJSONParser();
            }
        });
    } // end onCreate()

    void doJSONParser(){
        StringBuffer sb = new StringBuffer();

        String str =
                "[{'name':'배트맨','age':43,'address':'고담'},"+
                "{'name':'슈퍼맨','age':36,'address':'뉴욕'},"+
                "{'name':'앤트맨','age':25,'address':'LA'}]";

        try {
            JSONArray jarray = new JSONArray(str);   // JSONArray 생성
            for(int i=0; i < jarray.length(); i++){
                JSONObject jObject = jarray.getJSONObject(i);  // JSONObject 추출
                String address = jObject.getString("address");
                String name = jObject.getString("name");
                int age = jObject.getInt("age");

                sb.append(
                        "주소:" + address +
                        "이름:" + name +
                        "나이:" + age + "\n"
                    );
            }
            tv.setText(sb.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } // end doJSONParser()
}  // end class

이를 적절히 응용해서 보내는것도 하시면 됩니다.

  • 2016년 05월 28일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close