如何在 Scala.js 中将 Map 转换为 Json 对象?

haj*_*ime 0 scala.js

我正在尝试为 C3.js折线图编写外观。

我试图生成的 Javascript 代码是

var chart = c3.generate({
    data: {
        json: {
            "data1": [49.1, 20, 50, 40, 60, 50],
            "data2": [200.3, 130, 90, 240, 130, 220],
            "data3": [300.88, 200, 160, 400, 250, 250]
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这就是我调用我写的门面的方式

C3Chart.generate(scope.props.data)
Run Code Online (Sandbox Code Playgroud)

问题是我无法转换 C3MyChartDataset 类中的 apply 方法来返回一个 json 对象来发出这个对象

 json: {
        "data1": [49.1, 20, 50, 40, 60, 50],
        "data2": [200.3, 130, 90, 240, 130, 220],
        "data3": [300.88, 200, 160, 400, 250, 250]
    }
Run Code Online (Sandbox Code Playgroud)

如何在 Scala-js 中将 Map 转换为 JSON 对象?

@JSName("c3")
object C3Chart extends js.Object {
  def generate(data: MyChartData): js.Dynamic = js.native
}

trait C3MyChartDataset extends js.Object {
  def json: js.Object = js.native
}

object C3MyChartDataset {
  def apply(data: Map[String, Array[Double]]): C3MyChartDataset = {
    js.Dynamic.literal(
      json = data //I need to convert this into an object
    ).asInstanceOf[C3MyChartDataset]
  }
}

trait MyChartData extends js.Object {
  def data: js.Object = js.native
}

object MyChartData {
  def apply(datasets: C3MyChartDataset): MyChartData = {
    js.Dynamic.literal(
      data = datasets
    ).asInstanceOf[MyChartData]
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:我尝试使用 toJSDictionary 将其转换为 Dictionary 对象。(json = data.toJSDictionary)。但这仍然不会生成图表。使用 toJSDictionary 生成的 Javascript 对象是

data: Object
    json: Object
        Data1: $TypeData.initArray.ArrayClass
           u: Array[6]
           0: 30.1
           1: 200.1
           2: 100.1
           3: 400.1
           4: 150.1
           5: 250.1
Run Code Online (Sandbox Code Playgroud)

sjr*_*jrd 5

您的json对象的类型基本上是一个字典,其值是数字数组。转换为 Scala.js 类型,这意味着

js.Dictionary[js.Array[Double]]
Run Code Online (Sandbox Code Playgroud)

您可以将您data的类型Map[String, Array[Double]]转换为该类型

data.mapValues(_.toJSArray).toJSDictionary
Run Code Online (Sandbox Code Playgroud)