Разбор в json с помощью Cheshire - generate- string и parse-string
Я пытаюсь экспортировать json-схему для использования вне Clojure в javascript. Я могу сгенерировать это:
{:type "object",
:properties {:$class {:type "string"},
:name {:type "string"},
:clauseId {:type "string"},
:$identifier {:type "string"}},
:required [:$class :name :clauseId :$identifier]}
Что подходит для Clojure
Используя Cheshire сгенерированную строку, я могу:
"{
\"type\" : \"object\",
\"properties\" : {
\"$class\" : {
\"type\" : \"string\"
},
\"name\" : {
\"type\" : \"string\"
},
\"clauseId\" : {
\"type\" : \"string\"
},
\"$identifier\" : {
\"type\" : \"string\"
}
},
\"required\" : [ \"$class\", \"name\", \"clauseId\", \"$identifier\" ]
}"
Это в основном то, что я хочу, но без кавычек. Я попробовал строку синтаксического анализа из Чешира, описанную выше, и получил:
{"type" "object",
"properties" {"$class" {"type" "string"},
"name" {"type" "string"},
"clauseId" {"type" "string"},
"$identifier" {"type" "string"}},
"required" ["$class" "name" "clauseId" "$identifier"]}
Ближе, но у него удалены двоеточия. я хочу
{"type" : "object",
"properties" : {"$class" : {"type" "string"},
"name" : {"type" "string"},
"clauseId" : {"type" "string"},
"$identifier" : {"type" "string"}},
"required" : ["$class" "name" "clauseId" "$identifier"]}
Я чувствую, что это должно быть легко, и я чего-то упускаю. Я не понимаю, насколько это допустимый json без:
Как мне создать json с двоеточиями?
2 ответа
Я думаю, что здесь источником путаницы являются команды печати. Вы не показали этого в своем вопросе.
Еще одна путаница - это печать JSON как «источника» или «данных». В последнем случае в строке JSON должны отсутствовать двойные кавычки. В исходном коде JS их нет.
Пример:
(let [data {:a 1 :b [2 "three"]}
json (edn->json data)]
; prints w/o double-quotes
(println :a data)
; prints with double-quotes, as if source code
(prn :b data)
(newline)
(println :c json)
(prn :d json)
)
с результатом
-----------------------------------
Clojure 1.10.3 Java 15.0.2
-----------------------------------
Testing tst.demo.core
:a {:a 1, :b [2 three]}
:b {:a 1, :b [2 "three"]}
:c {"a":1,"b":[2,"three"]}
:d "{\"a\":1,\"b\":[2,\"three\"]}"
Функция
edn->json
это из библиотеки Tupelo , но похож на Чеширского Lib и др.
См. Также источников , особенно. Шпаргалка по Clojure.
Ах, да,
Вышесказанное было сделано в этот списокмоем любимом шаблонном проектедокументации Clojure .
Как упомянул Алан Томпсон, JSON выглядит правильно процитированным, если мы можем предположить, что обратная косая черта является артефактом того, как REPL отображает данные.
README от Чешира https://github.com/dakrone/cheshire дает пример синтаксического анализа JSON и получения ключей в виде ключевых слов. Очевидно, вы добавляете логический аргумент true сразу после аргумента JSON.