如何将 Map 转换为 Scala.js 中的 Json 对象?
How to convert Map to Json object in Scala.js?
我正在尝试为 C3.js line chart 编写外观。
我要生成的 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]
}
}
});
这就是我调用我编写的外观的方式
C3Chart.generate(scope.props.data)
问题是我无法将 C3MyChartDataset class 中的应用方法转换为 return 一个 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]
}
如何在 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]
}
}
更新:我尝试使用 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
假设我上面的问题是正确的,你可能想要 js.Dictionary -- 这是你认为 name/value 的正常 JavaScript 对象的通常 Scala.js 表示] 对。请注意,它有一个 (String, A)* 构造函数,可以很容易地从 Map 转换。
您的 json
对象的类型基本上是一个字典,其值是数字数组。翻译成Scala.js类型,即
js.Dictionary[js.Array[Double]]
您可以将类型 Map[String, Array[Double]]
的 data
转换为
类型
data.mapValues(_.toJSArray).toJSDictionary
我正在尝试为 C3.js line chart 编写外观。
我要生成的 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]
}
}
});
这就是我调用我编写的外观的方式
C3Chart.generate(scope.props.data)
问题是我无法将 C3MyChartDataset class 中的应用方法转换为 return 一个 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]
}
如何在 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]
}
}
更新:我尝试使用 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
假设我上面的问题是正确的,你可能想要 js.Dictionary -- 这是你认为 name/value 的正常 JavaScript 对象的通常 Scala.js 表示] 对。请注意,它有一个 (String, A)* 构造函数,可以很容易地从 Map 转换。
您的 json
对象的类型基本上是一个字典,其值是数字数组。翻译成Scala.js类型,即
js.Dictionary[js.Array[Double]]
您可以将类型 Map[String, Array[Double]]
的 data
转换为
data.mapValues(_.toJSArray).toJSDictionary