2017-12-21 9 views
1

, 우리는이 구조가 :동적 인 Kotlin/Js 객체를 일반 자바 스크립트 객체로 변환하는 간단한 방법은 무엇입니까? 예를 들어

data class Item(
     val city: String, 
     val name: String 
) 

val structure = mapOf("items" to listOf(
       Item("NY", "Bill"), 
       Item("Test", "Test2")) 

) 

를 그리고 자바 스크립트에서이 객체를 얻으려면 :

우리가 자바 스크립트와 같은 구조로 dynamic 유형 코 틀린에서 map을 변환 할 수있는 방법
var structure = { 
    "items": [ 
    { 
     "city": "NY", 
     "name": "Bill" 
    }, 
    { 
     "city": "Test", 
     "name": "Test2" 
    } 
    ] 
} 

?

내가에만이 명시 적 방법을 찾을 :

fun Map<String, Any>.toJs(): dynamic { 
    val result: dynamic = object {} 

    for ((key, value) in this) { 
     when (value) { 
      is String -> result[key] = value 
      is List<*> -> result[key] = (value as List<Any>).toJs() 
      else -> throw RuntimeException("value has invalid type") 
     } 
    } 

    return result 
} 

fun List<Any>.toJs(): dynamic { 
    val result: dynamic = js("[]") 

    for (value in this) { 
     when (value) { 
      is String -> result.push(value) 
      is Item -> result.push(value.toJs()) 
      else -> throw RuntimeException("value has invalid type") 
     } 
    } 

    return result 
} 

fun Item.toJs(): dynamic { 
    val result: dynamic = object {} 

    result["city"] = this.city 
    result["name"] = this.name 

    return result 
} 

나는 그 직렬화/역 직렬화으로도이 작업을 수행 할 수 있습니다 알고 있지만, 나는 그것이 느린 일부 오버 헤드 것이라 생각합니다.

누구나 쉽게 Kotlin을 비밀리에 변환하는 방법을 알고 있습니까 object 일반 Javascript object (dynamic Kotlin 유형)?

+0

어쩌면 .asDynamic()? – deviant

+0

'.asDynamic'은이 값을 '동적 타입'의 값으로 재 해석합니다. – kurt

답변

0

귀하의 질문을 이해하지 못할 수도 있습니다. 도움이되지 않는다면 실례합니다. 개인적으로, 나는 사용 알아챌의 팬입니다 : https://github.com/cbeust/klaxon

당신은 데이터 클래스의 모든 속성을 반복하고 JSON으로 변환하기 위해 자신의 반사 유틸리티를 쓸 수 있습니다.

+0

고마워요,하지만 그게 필요하지는 않습니다. 위와 같은 구조로 순수 자바 스크립트 객체를 가져오고 싶지만 serialization/deserialization은 필요하지 않습니다. 이러한 변형의 예가이 게시물에서 지적했습니다. – kurt

관련 문제