Разбор в 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.

Другие вопросы по тегам