我有一个只能解码密钥的要求。
考虑下面的例子 -
(require '[jsonista.core :as json])
(import
(com.fasterxml.jackson.core JsonFactory$Feature)
(com.fasterxml.jackson.databind ObjectMapper)
(com.fasterxml.jackson.datatype.joda JodaModule))
(def s "{\"name\":\"person1\",\"book\":\"Demo Book\",\"hash\":{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}}")
(def ^ObjectMapper object-mapper
(let [obj-mapper (json/object-mapper {:decode-key-fn true :modules [(JodaModule.)]})]
(doto obj-mapper
(-> .getFactory (.disable JsonFactory$Feature/USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING)))
obj-mapper))
(json/read-value s object-mapper)
Run Code Online (Sandbox Code Playgroud)
我想得到的输出是
{:book "Demo Book", :name "person1", :hash {"key3" "value3", "key2" "value2", "key1" "value1"}}
Run Code Online (Sandbox Code Playgroud)
在上面的 json 中,顶层被转换为键,嵌套不会转换为键,而是保留为字符串。
:decode-key-fn true使所有键和没有:decode-key-fn true所有键都是字符串,这不是我想要的。我怎样才能达到同样的效果?
如果您想转换所有键并且仅在顶层,您可以使用update-keys:
(-> (json/read-value s object-mapper)
(update-keys keyword))
Run Code Online (Sandbox Code Playgroud)
这样,:decode-key-fn设置object-mapper为false.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |