#json #clojure #compojure
#json #clojure #compojure
Вопрос:
У меня есть функция Clojure, которая записывает содержимое вектора URL-адресов в JSON и возвращает это из конечной точки API. Эти данные конечной точки считываются декодером Elm JSON в интерфейсном приложении. Запуск этой функции Clojure напрямую дает мне следующее:
(json/write-str ["http://www.example.com?param=value" "http://www.example2.com?param=value"])
Который возвращает:
"["http:\/\/www.example.com?param=value","http:\/\/www.example2.com?param=value"]"
Замечательно! Если я введу этот результат непосредственно в декодер Elm, такой как этот:
stringArrayDecoder : Json.Decoder.Decoder (List String)
stringArrayDecoder =
Json.Decoder.list Json.Decoder.string
Он успешно анализирует его без ошибок.
Однако, когда я просматриваю ответ JSON из конечной точки, он теряет часть экранирования, и я получаю это:
["http://www.example.com?param=value","http://www.example2.com?param=value"]
Которое мой декодер Elm не может прочитать.
Как мне избежать этого? Как я могу получить полностью экранированные значения JSON, созданные моей внутренней функцией, через конечную точку API и в мой декодер интерфейса Elm?
Ответ №1:
JSON позволяет вам экранировать косые черты /
и другие символы, чтобы предотвратить появление таких вещей, как </
в html.
write-str
имеет :escape-slash
логическую опцию:
: логическое значение escape-косой черты
Если значение true (по умолчанию), косая черта / экранируется как /
Таким образом, вы можете вместо этого написать
(json/write-str ["http://url.one" "http://url.two"] :escape-slash false)
=> "["http://url.one","http://url.two"]"
Комментарии:
1. Допустимый обходной путь — тем не менее, я хотел бы, чтобы это было рассмотрено на стороне elm, если это мой проект.
2. Я попробовал это, и этот декодер Elm работает… хотя ошибка > my = Json. Decode.decodeString (Json. Декодирование. перечислите Json. Decode.string) j Ok [» example.com?param=value»,»http://… : Результат Json. Декодирование. Ошибка (строка списка)
3. Спасибо за вашу помощь @Remy. Я также могу проанализировать прямой вывод этой обновленной команды write-str, хотя я все еще вижу проблему, о которой я упоминал, когда она теряет внешние двойные кавычки при возврате из API. Я могу задать отдельный вопрос относительно декодера Elm, который будет работать для массива JSON без кавычек, или лучше указать мою проблему. Однако ваш ответ был полезен сам по себе, поэтому я пометил его как таковой!
4. Ах, хорошо, теперь я лучше понимаю вопрос. Возможно, путаница заключается в том, что
write-str
на самом деле делает, что отличается от того, что возвращает API. Я бы посоветовал вам использоватьwrite
вместо этого и создать свой декодер на основе этого.