[안드로이드] JSON 파싱 - JsonArray 가져오기
JSON데이터를 가지고 오게되면 JSONObject로만 오는 경우는 드뭅..아니 거의 없습니다.
JsonArray를 통해 감싸져서 Array형태로 오기때문에 우리는 JsonArray를 풀어서 데이터들을 사용하기 편하게 저장해야 합니다.
그래서 오늘은 JsonArray를 어떻게 파싱하는지 알아보려고 합니다.
먼저, String으로 쭈욱- 받아온 데이터를 JSonArray 형태로 바꾸어 줍니다.
str - 받아온 Json Ruw한 값
jsonArray = new JSONArray(str);
JsonArray에 있는 Object를 하나씩 꺼내오기 위해 for문을 이용해 JsonObject를 꺼내옵니다.
for(int i = 0 ; i<jsonArray.length(); i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); String color = jsonObject.getString("color"); String number = jsonObject.getString("number"); String string = jsonObject.getString("string"); String bool = jsonObject.getString("boolean"); colorList.add(color); stringList.add(string); numberList.add(number); boolList.add(bool); }
전체소스는 다음과 같습니다.
저는 그냥 테스트로 받아온 걸 확인하기위해 ArrayList에 받은걸 바로 toString()으로 Text로 뿌렸어요.
원하는 타입대로 가공하셔 쓰시면 될 것 같아요.
[activity_main.xml]
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/button1" android:text="JsonArray 읽기" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/txtResult" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
[MainActivity.java]
public class MainActivity extends AppCompatActivity { private String str = "[{\"boolean\":\"true\",\"color\":\"#82b92c\",\"number\":\"123\",\"string\":\"Hello World\"}," + "{\"boolean\":\"false\",\"color\":\"#823333\",\"number\":\"2233\",\"string\":\"Hello World2\"}," + "{\"boolean\":\"true\",\"color\":\"#222b92c\",\"number\":\"12333\",\"string\":\"Hello World3\"}]"; private ArrayList<String>colorList; private ArrayList<String>stringList; private ArrayList<String>numberList; private ArrayList<String>boolList; private JSONArray jsonArray; private Button button1; private TextView txtResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button)findViewById(R.id.button1); txtResult = (TextView)findViewById(R.id.txtResult); colorList = new ArrayList<>(); stringList = new ArrayList<>(); numberList = new ArrayList<>(); boolList = new ArrayList<>(); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { jsonRead(); } }); } private void jsonRead() { try { jsonArray = new JSONArray(str); for(int i = 0 ; i<jsonArray.length(); i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); String color = jsonObject.getString("color"); String number = jsonObject.getString("number"); String string = jsonObject.getString("string"); String bool = jsonObject.getString("boolean"); colorList.add(color); stringList.add(string); numberList.add(number); boolList.add(bool); } } catch (JSONException e) { e.printStackTrace(); } txtResult.setText(colorList.toString() + "\n" + stringList.toString() + "\n" + numberList.toString() + "\n" + boolList.toString()); } }
[구현사진 및 영상]
'IT 개발 > 안드로이드개발' 카테고리의 다른 글
[안드로이드] 리스트(List)만들기 - RecyclerView이용. (0) | 2018.10.23 |
---|---|
[안드로이드] 스피너(Spinner)이용하기 - ArrayList, ArrayAdapter사용. (3) | 2018.10.19 |
[안드로이드] 액티비티(화면)전환, Intent이용 (0) | 2018.10.19 |
[안드로이드] 현재 GPS정보 알아오기/ 내 현재위치 찾기 (2) | 2018.10.13 |
[안드로이드]Json 파싱 - URL에서 JSON 읽기 (0) | 2018.10.12 |
[안드로이드] 권한요청/ 권한설정, 퍼미션체크 (2) | 2018.10.09 |
[안드로이드] EditText에서 텍스트입력 한줄로 제한하기(singleLine) (4) | 2018.10.05 |
[안드로이드] 화면고정, 세로모드/가로모드 설정 (0) | 2018.10.05 |