[英]Can I make json4s's extract method case insensitive?
我正在使用案例類通過json4s的extract
方法提取json。 不幸的是,我使用的“自然地球”源數據與套管不一致。在某些分辨率下,一個字段稱為iso_a2
,在某些情況下稱為ISO_A2
。 我只能讓json4s接受與case類中的字段匹配的那個:
object TopoJSON {
case class Properties(ISO_A2: String)
...
// only accepts capitalised version.
有什么方法可以使json4s忽略大小寫並接受兩者嗎?
使用配置屬性無法使其不區分大小寫,但是可以通過在解析的JSON中使用小寫或大寫的字段名來實現類似的結果。
例如,我們有輸入:
case class Properties(iso_a2: String)
implicit val formats = DefaultFormats
val parsedLower = parse("""{ "iso_a2": "test1" }""")
val parsedUpper = parse("""{ "ISO_A2": "test2" }""")
我們可以使用一個短函數將所有字段名都小寫:
private def lowercaseAllFieldNames(json: JValue) = json transformField {
case (field, value) => (field.toLowerCase, value)
}
或僅針對特定字段:
private def lowercaseFieldByName(fieldName: String, json: JValue) = json transformField {
case (field, value) if field == fieldName => (fieldName.toLowerCase, value)
}
現在,提取案例類實例:
val resultFromLower = lowercaseAllFieldNames(parsedLower).extract[Properties]
val resultFromUpper = lowercaseAllFieldNames(parsedUpper).extract[Properties]
val resultByFieldName = lowercaseFieldByName("ISO_A2", parsedUpper).extract[Properties]
// all produce expected items:
// Properties(test1)
// Properties(test2)
// Properties(test2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.