Elm:如何编码嵌套对象
Elm : How to Encode Nested objects
型号
type alias Model {
name : String
, poi_coordinates : Coordinates
}
type alias Coordinates =
{
coord_type : String
, coordinates : List Float
}
poiFormEncoder : Model -> Encode.Value
poiFormEncoder model =
Encode.object
[
( "name", Encode.string model.name )
, ( "type", Encode.string model.poi_coordinates.coord_type)
, ( "poi_coordinates", Encode.array Encode.float (Array.fromList model.poi_coordinates.coordinates) )
]
请问如何编码这种数据类型?我不知道,我做的编码器没有坐标填充。非常感谢任何帮助。 Json 文件格式如下
[
{
"name": "Mcd",
"coordinates": {
"type": "Point",
"coordinates": [
101.856603,
2.924
]
}
},
.
.
.
]
您可以嵌套调用 Json.Encode.object
。每次你想要在输出中有一个新的对象,你需要另一个,例如:
poiFormEncoder : Model -> Encode.Value
poiFormEncoder model =
Encode.object
[ ( "name", Encode.string model.name )
, ( "coordinates"
, Encode.object
[ ( "type", Encode.string model.poi_coordinates.coord_type )
, ( "coordinates", Encode.list Encode.float model.poi_coordinates.coordinates )
]
)
]
这应该是有道理的:它是一个 (key, value)
对的列表,值应该是另一个对象。
附带说明一下,这取决于您的用例,但您的 Coordinates
类型看起来像是自定义 Elm 类型的主要候选者,例如:
type Coordinates
= Point { x : Float, y : Float }
| Polar { r : Float, t : Float }
| ...
如果您发现您正在做很多检查字符串 type
值然后相应地处理坐标的事情,那么这样的结构可能是内部使用的更好的结构。当然,最好的表示将取决于您如何使用类型。
型号
type alias Model {
name : String
, poi_coordinates : Coordinates
}
type alias Coordinates =
{
coord_type : String
, coordinates : List Float
}
poiFormEncoder : Model -> Encode.Value
poiFormEncoder model =
Encode.object
[
( "name", Encode.string model.name )
, ( "type", Encode.string model.poi_coordinates.coord_type)
, ( "poi_coordinates", Encode.array Encode.float (Array.fromList model.poi_coordinates.coordinates) )
]
请问如何编码这种数据类型?我不知道,我做的编码器没有坐标填充。非常感谢任何帮助。 Json 文件格式如下
[
{
"name": "Mcd",
"coordinates": {
"type": "Point",
"coordinates": [
101.856603,
2.924
]
}
},
.
.
.
]
您可以嵌套调用 Json.Encode.object
。每次你想要在输出中有一个新的对象,你需要另一个,例如:
poiFormEncoder : Model -> Encode.Value
poiFormEncoder model =
Encode.object
[ ( "name", Encode.string model.name )
, ( "coordinates"
, Encode.object
[ ( "type", Encode.string model.poi_coordinates.coord_type )
, ( "coordinates", Encode.list Encode.float model.poi_coordinates.coordinates )
]
)
]
这应该是有道理的:它是一个 (key, value)
对的列表,值应该是另一个对象。
附带说明一下,这取决于您的用例,但您的 Coordinates
类型看起来像是自定义 Elm 类型的主要候选者,例如:
type Coordinates
= Point { x : Float, y : Float }
| Polar { r : Float, t : Float }
| ...
如果您发现您正在做很多检查字符串 type
值然后相应地处理坐标的事情,那么这样的结构可能是内部使用的更好的结构。当然,最好的表示将取决于您如何使用类型。