예제Json

{

  "이름": "홍길동",

  "나이": 25,

  "성별": "남",

  "결혼": true,

  "취미": ["농구", "독서"],

  "주소": "서울특별시 관악구 삼성동", 

  "가족": {"아버지": "홍미남", "어머니": "김미녀"}

}

 

Activity소스


package com.omnibuscode.myapplication;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;


public class MainActivity extends ActionBarActivity {

    TextView textV;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textV = (TextView) findViewById(R.id.tf);
        new JsonLoadingTask().execute();
    }


    //데이터 가공
    public String getJsonText() {
        StringBuffer sb = new StringBuffer();

        try{
            String line  = getStringFromUrl("http://www.androidside.com/book/data.json");

            JSONObject object = new JSONObject(line);

            sb.append("이름-").append(object.getString("이름")).append("\n");
            sb.append("나이-").append(object.getInt("나이")).append("\n");
            sb.append("성별-").append(object.getString("성별")).append("\n");
            sb.append("결혼-").append(object.getBoolean("결혼")).append("\n");

            //취미는 배열로 구성되어있으므로 Json배열 생성
            sb.append("취미-");
            JSONArray hobbyArray = new JSONArray(object.getString("취미"));

            for(int i = 0; i<hobbyArray.length(); i++){
                sb.append(hobbyArray.getString(i)).append(",");
            }

            sb.append("\n");
            sb.append("주소-").append(object.getString("주소")).append("\n");


            //가족 데이터는 내부 json이므로 json 객체 생성성
            sb.append("가족-");
            JSONObject familyObject = new JSONObject(object.getString("가족"));
            sb.append(familyObject.getString("아버지")).append(",");
            sb.append(familyObject.getString("어머니"));

            //  Log.e("TTT",object.getString("이름")+"");

        }catch (JSONException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }

        return sb.toString();
    }

    //데이터 저장
    public String getStringFromUrl(String url) throws UnsupportedOperationException, UnsupportedEncodingException {

        // 입력 스트림을 euc-kr를 사용해서 읽은 후  이를 사용해서
        // 라인단위로 데이터를 읽을수 있는 BufferReader를 생성한다
        BufferedReader br = new BufferedReader(new InputStreamReader(getInputStreamFromUrl(url),"UTF-8"));   //(new InputStreamReader(url,"UTF-8"));

        //읽은 데이터를 저장할 StringBuffer를 생성한다
        StringBuffer sb = new StringBuffer();

        try{
            //라인 단위로 읽은 데이터를 임시 저장할 자열 변수
            String line = null;

            //라인 단위로 데이터를 읽어서 StringBuffer에 저장한다
            while ((line = br.readLine()) != null){
                sb.append(line);
                Log.e("TTL",line);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
        return  sb.toString();
    }

    //url 커넥션
    public  static InputStream getInputStreamFromUrl(String url){
        InputStream contentStream = null;

        try{
            URL reauestURL  = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) reauestURL.openConnection();
            if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
                contentStream = conn.getInputStream();
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return  contentStream;
    }

    //결과 출력  onPostExecute 에서 ui접근
    private class JsonLoadingTask extends AsyncTask<String, Void,String>{
        @Override
        protected String doInBackground(String... params) {
            return  getJsonText();
        }

        protected void onPostExecute(String result){
            textV.setText(result);
        }
    }

}