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로 파싱하면 되긴 할 것 같다...
'Android' 카테고리의 다른 글
[안드로이드]텍스트사이즈 sp와 dp의 차이 (0) | 2016.04.09 |
---|---|
[안드로이드]인텐트로 액티비티간 이동 + 데이터전달 (0) | 2016.04.05 |
[안드로이드]안드로이드 스튜디오에서 단위테스트 하기! (0) | 2016.01.05 |
[안드로이드]쓰레드와 핸들러 (1) | 2016.01.02 |
[안드로이드]sugar orm 사용하기 (0) | 2015.12.30 |