/ / हाइफ़न के साथ कैमेलाइज़केय का उपयोग कैसे करें - जैसन, स्केला, json4s

हाइफ़न के साथ camelizeKeys का उपयोग कैसे करें - जेसन, स्कैला, जेसन 4 एस

मैं एक वेब सेवा से एक json प्रतिक्रिया पार्स कर रहा हूँजिसमें कुछ क्षेत्रों को हाइफ़न का उपयोग करके परिभाषित किया गया है। मैं इन नामों को अपनी स्कैला केस क्लास में मिश्रित केस के नामों में बदलना चाहता हूं। मैं camelizeKeys वजीफा का उपयोग करने के लिए सोचा था, लेकिन यह काम करने के लिए प्रतीत नहीं होता है।

{"offset":0,"total":359,"per-page":20}

में परिवर्तित होने के लिए:

case class Response(offset: Int, total: Int, perPage: Int)

और मैं करता हूँ:

parse(str).camelizeKeys.extract[Response]

मुझे त्रुटि मिलती है:

Ex: org.json4s.package $ MappingException: PerPage के लिए कोई उपयोग करने योग्य मूल्य नहीं है मूल्य नहीं मिला जिसे इंट में बदला जा सकता है

उत्तर:

जवाब के लिए 0 № 1

चारों ओर एक काम पाठ को पार्स करने से पहले एक अंडरस्कोर के साथ हाइफ़न की सभी घटनाओं को बदलना है। तो एक निम्नलिखित कर सकता है:

parse(str.replaceAll("([a-z])-([a-z])", "$1_$2")).camelizeKeys.extract[Response]

लेकिन यह समाधान जटिल के साथ ही सीमित हैडेटा संरचनाएं यह काम नहीं कर सकती हैं; यदि किसी फ़ील्ड मान में ऐसा कोई पैटर्न है, तो आप डेटा को दूषित कर सकते हैं। इसलिए एक और पूर्ण समाधान मेरे स्वयं के प्रतिस्थापन कार्य को लिखना था:

def replaceAll(str: String, regex: String)(f: String => String) = {
val pattern = regex.r
val (s, i) = (("", 0) /: pattern.findAllMatchIn(str)) { case ((s, i), m) =>
(s + str.substring(i, m.start) + f(m.toString), m.end)
}
s + str.substring(i)
}

और इसे मेरे जस स्ट्रिंग में लागू करें:

replaceAll(str, ""[0-9a-z\-]*":")(_.replace("-", "_"))