본문 바로가기

Android

arraylist 데이터들을 json으로 만들기

String 변수에 들어있는 값과

arraylist에 들어있는 데이터들을 합쳐서

json으로 만드려면 어떻게 해야할까?

예를들어

String id = "userID";
String planName = "planA"

두 변수에 값이 들어있고,

ArrayList<Place> placeList = new ArrayList<>();

arrayList가 있다.

*Place클래스

public class Place {
String contentid;
String contenttypeid;
String mapx;
String mapy;
}

이것들을

{

    "id": "userID",

    "planName": "planA",

    "item": [

        {

            "contentid": "test_1_contentid",

            "contenttypeid": "test_1_contenttypeid",

            "mapx": "test_1_mapx",

            "mapy": "test_1_mapy"

        },

        {

            "contentid": "test_2_contentid",

            "contenttypeid": "test_2_contenttypeid",

            "mapx": "test_2_mapx",

            "mapy": "test_2_mapy"

        },

        {

            "contentid": "test_3_contentid",

            "contenttypeid": "test_3_contenttypeid",

            "mapx": "test_3_mapx",

            "mapy": "test_3_mapy"

        }

    ]

}

이런 형식으로 만드려면

먼저 JSONObject 를 만들고

JSONObject의 put메소드로 id와 planName을 넣어준다.(소스에서 planName - id 순으로 입력해야 출력할때 id - planName순으로 출력됨 (이유는 모르겠음))

그리고 JSONArray를 만들고 (json이 들어갈 array)

리스트의 크기만큼 for문을 돌면서 JSONArray에 put으로 넣어준다.

마지막으로 처음 만든 JSONObject에 put메소드로 JSONArray를 넣어준다.


*소스

               JSONObject obj = new JSONObject();
try {
JSONArray jArray = new JSONArray();//배열이 필요할때
for (int i = 0; i < placeList.size(); i++)//배열
{
JSONObject sObject = new JSONObject();//배열 내에 들어갈 json
sObject.put("contentid", placeList.get(i).getContentid());
sObject.put("contenttypeid", placeList.get(i).getContenttypeid());
sObject.put("mapx", placeList.get(i).getMapx());
sObject.put("mapy", placeList.get(i).getMapy());
jArray.put(sObject);
}
obj.put("planName", "planA");
obj.put("id", "userID");
obj.put("item", jArray);//배열을 넣음

System.out.println(obj.toString());

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


*만약 변수없이 리스트만 json으로 만들고싶다?

그럴경우에는 간단히 처리할 수 있다.

Gson gson = new Gson();
String jsonPlace = gson.toJson(placeList);


*주의할점

gson.toJson 으로 json형식으로 만든 뒤

JSONObject에 put으로 넣게되는 경우

{"pname":"플랜명","id":"유저아이디","item":"[{\"contentid\":\"128553\",\"contenttypeid\":\"12\",\"mapx\":\"37.5740757072\",\"mapy\":\"126.9849118900\",\"placename\":\"쌈지길\"},

.............

이런식으로 "앞에 \가 붙게된다. 

왜냐하면 String값을 JSONObject에 put을 하게되면 "를 인식하기 위해서 \를 붙여주기 때문이다.


이런식으로 하게되면 서버쪽에서 replace로 파싱하면 되긴 할 것 같다...