2017-12-21 15 views
1

、我々は、この構造を持っている:動的なKotlin/Jsオブジェクトをプレーンなjavascriptオブジェクトに変換する簡単な方法は何ですか?例えば

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

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

) 

をそして私はJavaScriptでこのオブジェクトを取得したい:

我々はJavascriptで、このような構造で dynamic型にKotlinから 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 
} 

私はシリアライズ/デシリアライゼーションのでもこれを行うことが可能です知っているが、私はそれが遅くなると、いくつかのオーバーヘッドをすると思います。

誰もが簡単な方法を知っていますかコトリンobjectをプレーンJavascriptに変換するobjectdynamic Kotlinタイプ)?

+0

おそらく.asDynamic()? – deviant

+0

'.asDynamic'はこの値を' dynamic type'の値として再解釈します – kurt

答えて

0

私はあなたの質問を本当に理解できないかもしれません。 は個人的に、私はクラクションを使用してのファンです: https://github.com/cbeust/klaxon

あなたはデータクラスのプロパティのすべてを反復処理し、JSONに変換する独自の反射ユーティリティを書くことができます。

+0

ありがとうございます。 私は、上記のような構造を持つ純粋なjavascriptオブジェクトを取得したいが、シリアライズ/デシリアライズはしない。 このような変換の例として、私はその記事で指摘しました。 – kurt

関連する問題