안드로이드

[Android/iOS] 웹뷰 브릿지 함수 JsonArray를 String으로 전달 할 때 이슈

코딩하는후운 2024. 11. 18. 09:44
반응형

웹뷰 브릿지 함수 JsonArray를 String으로 전달해야할 때 이슈

웹에서 받은 javaScript fuction으로 결과를 return주는 작업에서 이슈가 발생했다.

val js = "javascript:${String}(${String});"
webView.evaluateJavascript(js) {
    jsCallback.callback(it)
}

 

 

이유 : 문자열 내의 이중 인용부호(")가 제대로 파싱되지 않아 JSON 배열이 조기에 끊기기 때문

Web에서 배열 "localAlarmList": "[{\"autoId\":1, ... 으로 될 때 String쪽 배열이 빨리 끊긴다. \" -> \\\\\"으로 바꿔주어 해결

 

[안드로이드 해결]

웹 또는 네트워크 요청에서 JSON 배열을 문자열로 처리할 때, 문자열 내 인용부호(")를 이스케이프하여 문제가 발생하지 않도록 해야 합니다.

  • Android에서는 JSON 문자열 내 인용부호(")를 이스케이프하기 위해 \\\" 형식을 사용합니다. 이때 이스케이프를 처리하는 과정에서 총 5개의 문자가 필요합니다.

이해 과정:

  • "\""  "\\\""로 변환.
  • 최종 결과는 \\\" 형태가 되어야 하므로, 각 \가 두 번씩 이스케이프됩니다.
  • 이로 인해 Android에서는 5개의 문자(\\\")로 변환됩니다.

 

[iOS 해결]

iOS에서는 JSON 문자열 내 인용부호(")를 이스케이프하기 위해 \" 형식을 사용합니다. 이스케이프 문자를 한 번만 해석하기 때문에, 총 3개의 문자로 이스케이프가 처리됩니다.

이해 과정:

  • "\""  "\\\""로 변환.
  • Swift는 이스케이프 처리를 한 번만 적용하므로, 3개의 문자(\\\")로 충분합니다.

 

 

반응형