사용자 도구

사이트 도구


android:json파싱하기
json파싱하기

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
android:json파싱하기 [2024/10/09 23:48] 이거니맨android:json파싱하기 [2025/04/23 23:37] (현재) 이거니맨
줄 79: 줄 79:
  
     return jsonDoc.toString()     return jsonDoc.toString()
 +}
 +
 +</code>
 +
 +==== 3. 데이터 클라스 ====
 +
 +위에 쓰인 데이터클라스의 모양은 다음과 같다.
 +
 +<code kotlin>
 +// 폭행의 종류
 +data class KindOfAssault(
 +
 +    var checkFamily : Boolean = false, // 가정폭력
 +    var checkDating : Boolean = false,  // 교제폭력(데이트폭력)
 +    var checkEnfant : Boolean = false,  // 아동폭행
 +    var checkSchool : Boolean = false,  // 학교폭력
 +    var checkSenior : Boolean = false,  // 노인폭행
 +    var checkMedical : Boolean = false,  // 의료인 폭행
 +    var checkAirplane : Boolean = false, // 항공기 내 폭행
 +    var checkDriver : Boolean = false, // 운전자 폭행
 +    var checkAssault : Boolean = false // 일반 폭행
 +
 +)
 +
 +// 피고소인과의 관계
 +data class RelationshipWithVictim(
 +    var spouse : Boolean = false,  // 배우자
 +    var parents : Boolean = false, // 존속
 +    var family : Boolean = false, // 배주자 및 존속을 제외한 가족
 +    var lover : Boolean = false, // 연인, 데이팅 폭력
 +    var friend : Boolean = false, // 친구, 학교폭력
 +    var unaquaintance : Boolean = false, // 모르는 사람
 +    var etc : Boolean = false, // 기타
 +    var etcDetail : String = "없음"  // 기타 관계 기본값
 +)
 +
 +// 피해상태
 +data class StatusOfTrauma(
 +    var bloated : Boolean = false, // 부어오름(부종)
 +    var blooded : Boolean = false, // 피가 남
 +    var brokenBone : Boolean = false, // 뼈가 부러짐
 +    var bruise : Boolean = false, // 멍
 +    var nothing : Boolean = false, // 외부 상처 없음
 +    var etc : Boolean = false, //  기타
 +    var etcDetail: String = "없음" // 기타 기본 값
 +)
 +
 +//  폭행 방법
 +data class MethodOfBattery(
 +    var collar : Boolean = false, // 멱살잡다
 +    var push : Boolean = false, // 밀침
 +    var pull : Boolean = false, // 잡아당김
 +    var punch : Boolean = false, // 주먹으로 때림
 +    var kick : Boolean = false, // 발로 참
 +    var throwing : Boolean = false, // 물건을 던짐
 +    var throwingDetail : String = "", // 물건을 던질 때 물건의 종류
 +    var waffe : Boolean = false, // 흉기를 휘두름
 +    var waffeDetail : String = "", // 휘두르는 흉기의 종류
 +    var etc : Boolean = false, // 기타
 +    var etcDetail: String = "", // 기타 기본 값
 +)
 +
 +</code> 
 +
 +==== 4. 배열(JSON Array) ====
 +
 +배열로 저장하고 싶으면 JSON Array를 선언해 주고, 여기에 JSON 모델을 집어넣으면 된다. 다음 예제를 참고하라.
 +
 +<code kotlin>
 +// JSON Array로 스트링 만들기
 +fun writeJsonArray(answerTexts : ArrayList<AnswerText>) : String {
 +
 +
 +    //JsonArray 생성
 +    val jArray: JSONArray = JSONArray()
 +
 +    answerTexts.forEach() {
 +        // 폭행 종류 JSON
 +        val jsonAnswer = JSONObject()
 +        try {
 +            jsonAnswer.put("text", it.text)
 +            jsonAnswer.put("correctness", it.correctness)
 +            jsonAnswer.put("index", it.index)
 +
 +            jArray.put(jsonAnswer)
 +        } catch (e: JSONException) {
 +            // TODO Auto-generated catch block
 +            e.printStackTrace()
 +        }
 +    }
 +
 +
 +
 +    return jArray.toString()
 } }
  
줄 101: 줄 195:
 json으로 받아온 후 특정한 키 값을 받아오는 것은 다음과 같다. json으로 받아온 후 특정한 키 값을 받아오는 것은 다음과 같다.
  
-<code kotlikn>+<code kotlin>
   val jsonElementObject = JSONObject(sueItem.jsonElements)  // Json Elements 데이터 가져와서 JSON으로 변환   val jsonElementObject = JSONObject(sueItem.jsonElements)  // Json Elements 데이터 가져와서 JSON으로 변환
   val jsonAssault = jsonElementObject.getString("attackedDate")   val jsonAssault = jsonElementObject.getString("attackedDate")
줄 114: 줄 208:
 따라서 위 예제는 아래와 같이 해주는게 좋다.  따라서 위 예제는 아래와 같이 해주는게 좋다. 
  
-<code kotlikn>+<code kotlin>
   val jsonElementObject = JSONObject(sueItem.jsonElements)  // Json Elements 데이터 가져와서 JSON으로 변환   val jsonElementObject = JSONObject(sueItem.jsonElements)  // Json Elements 데이터 가져와서 JSON으로 변환
   val jsonAssault = jsonElementObject.optString("attackedDate", "2024년 10월 20일")   val jsonAssault = jsonElementObject.optString("attackedDate", "2024년 10월 20일")
줄 152: 줄 246:
 </code> </code>
  
 +==== 3. 해당 JSON요소가 없을 경우를 대비한 에러처리 추가 ==== 
 +
 +만약 JSON카테고리가 없을 경우 위의 optstring과 같은 기능을 하는 함수가 필요하다. 따라서 다음과 같이 고쳐주면 된다. 
 +
 +<code kotlin>
 +// 폭행 방법 JSON 받아오기
 +fun  getJsonMethodOfBattery(jsonObject: JSONObject) : MethodOfBattery {
 +
 +    // 만약 없는 경우 더미를 만들기
 +    if (jsonObject.isNull("methodOfBattery"))
 +    {
 +        // 피해상태
 +        val jsonMethod = JSONObject()
 +        try {
 +            jsonMethod.put("collar", "false")
 +            jsonMethod.put("push", "false")
 +            jsonMethod.put("pull", "false")
 +            jsonMethod.put("punch", "false")
 +            jsonMethod.put("kick", "false")
 +            jsonMethod.put("throwing", "false")
 +            jsonMethod.put("throwingDetail", "")
 +            jsonMethod.put("waffe", "false")
 +            jsonMethod.put("waffeDettail", "")
 +            jsonMethod.put("etc", "false")
 +            jsonMethod.put("etcDetail", "")
 +
 +            jsonObject.put("methodOfBattery", jsonMethod)   // 피해상태 JSON
 +        }catch (e: JSONException) {
 +            e.printStackTrace()
 +        }
 +    }
 +
 +    // JSON 받아오기
 +    val jsonMethodObject = jsonObject.getJSONObject("methodOfBattery")
 +
 +    val valueOfMethod : MethodOfBattery = MethodOfBattery(
 +        collar = jsonMethodObject.optString("collar", "false").toBoolean(),
 +        push = jsonMethodObject.optString("push", "false").toBoolean(),
 +        pull = jsonMethodObject.optString("pull", "false").toBoolean(),
 +        punch = jsonMethodObject.optString("punch", "false").toBoolean(),
 +        kick  = jsonMethodObject.optString("kick", "false").toBoolean(),
 +        throwing = jsonMethodObject.optString("throwing", "false").toBoolean(),
 +        throwingDetail = jsonMethodObject.optString("throwingDetail", ""),
 +        waffe = jsonMethodObject.optString("waffe", "false").toBoolean(),
 +        waffeDetail = jsonMethodObject.optString("waffeDetail", ""),
 +        etc = jsonMethodObject.optString("etc", "false").toBoolean(),
 +        etcDetail = jsonMethodObject.optString("etcDetail", "없음")
 +    )
 +
 +    return valueOfMethod
 +}
 +
 +
 +</code>
 +
 +==== 4. 배열로 읽어 오기 ====
 +
 +배열로 읽는 것은 다음과 같이 하면 된다. 
 +
 +<code kotlin>
 +// 스트링에서 JSON 배열을 돌려주는 함수 
 +fun getJsonAnswerText(jsonText : String) : ArrayList<AnswerText> {
 +
 +    try {
 +        val jsonArray = JSONArray(jsonText)
 +
 +        val textArray = ArrayList<AnswerText>(jsonArray.length())
 +
 +        for (i in 0 until jsonArray.length()) {
 +            val jsonObject = jsonArray[i] as JSONObject
 +
 +            val valueOfAnswer : AnswerText = AnswerText(
 +                text = jsonObject.optString("text", "").first(),
 +                correctness = jsonObject.optString("correctness", "false").toBoolean(),
 +                index = jsonObject.optString("index", "0").toInt()
 +
 +            )
 +
 +            textArray.add(valueOfAnswer)
 +        }
 +
 +        return textArray
 +    }catch (e: JSONException) {
 +        // TODO Auto-generated catch block
 +        e.printStackTrace()
 +    }
 +    
 +    //  아래 코드는 만약에 에러가 날 경우에만 돌려주는 더미 배열이다. 
 +    val textArray = ArrayList<AnswerText>()
 +
 +    return textArray
 +
 +}
 +
 +</code>
  
  
줄 276: 줄 465:
  
 </code> </code>
 +
 +===== 응용 =====
 +
 +[[android:pdfdocument:commandmirroring#고소인과 피고소인 테이블 만들기|고소인과, 피고소인에 대한 데이터를 주고 받을 때]]에도 이 방식을 이용했다. 
android/json파싱하기.1728485337.txt.gz · 마지막으로 수정됨: 2024/10/09 23:48 저자 이거니맨