मैं नए Play 2.1-RC1 ढांचे का उपयोग कर रहा है और मैं, कुछ इस तरह एक वर्ग एक विकल्प [] क्षेत्र है कि है:कैसे खेलने में JSON पार्स में वैकल्पिक फ़ील्ड को संभालने के लिए 2.1
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.json.Reads._
import play.api.libs.json.Writes._
import play.api.libs.json.Format._
import play.api.libs.functional.syntax._
case class Test(name: String, value: Option[String])
object Test {
implicit val testFormat = (
(__ \ "name").format[String] and
(__ \ "value").format[Option[String]]
)(Test.apply, unlift(Test.unapply))
def fromJson(js: String): Test = {
Json.fromJson[Test](Json.parse(js)).fold(
valid = { t => t},
invalid = { e => {
val missingField = (e(0)._1).toString.substring(1)
val badJs = js.trim
val newJs = badJs.substring(0, badJs.length()-1)+",\""+missingField+"\":null}"
fromJson(newJs)
}}
)
}
}
मैं जेएसओएन तारों को संभालने में सक्षम होना चाहते हैं जो वैकल्पिक "मान" डेटा को छोड़ देते हैं, उदाहरण के लिए
val y = """{"name":"someone"}"""
(संपादित प्रश्न) मैं json स्ट्रिंग (बल्कि अनाड़ीपन से) को फिर से लिखने के रूप में मान्यता कदम में दिखाया गया है, लेकिन वहाँ एक सरल पैटर्न मैं वैकल्पिक फ़ील्ड लापता के लिए कोई भी आपूर्ति करने के लिए उपयोग कर सकते हैं? ध्यान दें कि यह पुनर्लेख नेस्टेड संरचनाओं, या कहीं भी जहां मैं लापता क्षेत्र को बस जोड़ नहीं सकता हूं, के साथ काम नहीं करता है।
एकमात्र समस्या यह है कि जेसन अनुरोध से नहीं आ रहा है लेकिन वेबसाईट से। – NickStoughton
@ निकस्टॉटन 'Iteratee.foreach [जेएसवेल्यू] (घटना => जेसन.फ्रॉमजसन [टेस्ट] (घटना)) ' – sndyuk
@ निकस्टॉफ्टन जेएफवाईआई https://github.com/playframework/Play20/blob/master/samples/scala/websocket -चैट/ऐप/मॉडल/ChatRoom.scala – sndyuk