Elm Json Decode - ничего не делать, вернуть оригинальную строку - PullRequest
2 голосов
/ 09 марта 2020

Я использую -found / elm- aws -core для получения информации от AWS API, что, к сожалению, очень и очень противоречиво. Большинство конечных точек возвращают JSON, и это прекрасно работает с этой библиотекой, которой для выполнения запроса требуется декодер JSON, но конечная точка EC2 возвращает XML (потому что почему бы и нет).

Библиотека Насколько я могу судить, у меня нет опций не декодировать JSON, что совсем не работает:

let ec2 region = Service.defineRegional "ec2" "2016-11-15" Service.QUERY Service.SignV4 (Service.setXmlNamespace "https://ec2.amazonaws.com/doc/2016-11-15/") region in
let params = [("Action", "DescribeImages"), ("Version", "2016-11-15"), ("Owner.1", "self")] in
Http.request "DescribeImages" GET "/" Http.emptyBody JSONDECODERHERE |> Http.addQuery params |> Http.send (ec2 region) creds |> Task.attempt msg
Failed : Problem with the given value:

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<DescribeImagesResponse .......

Как вы можете видеть, вам нужно передать JSON Декодер на Http.request, но это, конечно, не получается при получении XML. Есть ли способ создать «фальшивый» JSON декодер, который бы на самом деле ничего не делал и просто передавал необработанную строку? Я пытался использовать Decode. строка, но это все еще фактически расшифровывает это, которое терпит неудачу. Если бы был какой-то способ, я мог бы потом вручную запустить на нем декодер XML в своей функции обновления, что было бы хорошо.

Спасибо

1 Ответ

1 голос
/ 11 марта 2020

Невозможно создать «поддельный» декодер, который делает то, что вы хотите, потому что проблема не в декодировании. Проблема с разбором, который делается перед декодированием. Синтаксический анализ - это процесс преобразования строки в структуру данных, обычно называемую абстрактным синтаксическим деревом (AST), но поскольку Elm компилируется в JavaScript, а JSON также является подмножеством JavaScript, результат анализа на самом деле является просто JavaScript объект. Декодирование - это процесс превращения этой нетипизированной структуры данных в правильно типизированную структуру данных.

Поэтому с этим API невозможно выполнить то, что вы хотите sh. Скорее всего, вам нужно будет создать запрос http самостоятельно и использовать elm/http напрямую.

...