안드로이드에서 Json 오브젝트를 보내고 파싱하는건 어떻게 하나요?
조회수 10431회
서버로부터 메세지를 Json 형식으로 보내고 Json형식으로 받아와 처리하려고 하는데요
아마 서버로부터 아래 형식으로 받아올 것 같은데 { "post": { "username": "someusername", "message": "this is a sweet message", "image": "http://localhost/someimage.jpg", "time": "present time" } }
이정도하려면 JSON에 대한 지식이 얼마나 있어야하죠? JSON을 보내고 받는 법 좀 가르쳐주세요.
1 답변
-
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
이를 적절히 응용해서 보내는것도 하시면 됩니다.
댓글 입력