Вяз: Как кодировать вложенные объекты - PullRequest
0 голосов
/ 22 марта 2020

Модель

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
            ]
        } 
    },
         .
         .
         .
]

1 Ответ

3 голосов
/ 22 марта 2020

Вы можете вкладывать звонки на 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 и затем соответственно обрабатываете координаты, что-то вроде этого может быть гораздо более приятной структурой для внутреннего использования. Конечно, лучшее представление будет зависеть от того, как вы используете тип.

...