2013-08-08 10 views
7

मेरे पास नीचे नमूना कोड है।स्कैला प्ले जेसन पढ़ता है

import play.api.libs.json._ 
import play.api.libs.functional.syntax._ 
import play.api.data.validation.ValidationError 
import play.api.libs.json.Reads._ 

case class Retailer(firstName:String,lastName:String,email:String,mobileNo:String,password:String) 
case class Business(name:String,preferredUrl:String,businessPhone:String,retailer:Retailer) 

object JsonTest { 
    val jsonValue = """ 
    { 
    "business": 
    { 
     "name":"Some Business Name", 
     "preferredUrl":"someurl", 
     "businessPhone":"somenumber", 
     "retailer": 
     { 
     "firstName":"Some", 
     "lastName":"One", 
     "email":"[email protected]", 
     "mobileNo":"someothernumber", 
     "password":"$^^HFKH*" 
     } 
    } 

    } 
    """ 
    def printJson ={ 

    implicit val rltRds = (
     (__ \ "firstName").read[String] ~ 
     (__ \ "lastName").read[String] ~ 
     (__ \ "email").read[String] ~ 
     (__ \ "mobileNo").read[String] ~ 
     (__ \ "password").read[String] 
    )(Retailer)  

    implicit val bsnsRds = (
     (__ \ "name").read[String] ~ 
     (__ \ "preferredUrl").read[String] ~ 
     (__ \ "businessPhone").read[String] ~ 
     (__ \ "retailer").read[Retailer](rltRds) 
    )(Business)  


    val buisness = Json.parse(jsonValue).validate[Business](bsnsRds) 
    val bus = new Business("Some Business","somebusinessurl","somenumber", new Retailer("Some","One","[email protected]","someothernumber","$^^HFKH*")) 
    //val json = Json.toJson(bus) 

    println(buisness) 
    } 




    def main(args: Array[String]): Unit = { 
    printJson 
    } 

} 

मैं Json प्रमाणीकरण त्रुटि मिलती है, जब मैं स्काला वस्तु में json (इस मामले में बिजनेस क्लास) पार्स करने के लिए प्रयास करें। कुंजी निकाल दिए जाते हैं: यदि मेरी json तरह

val jsonValue = """ 
    { 
     "name":"Some Business Name", 
     "preferredUrl":"someurl", 
     "businessPhone":"somenumber", 
     "retailer": 
     { 
     "firstName":"Some", 
     "lastName":"One", 
     "email":"[email protected]", 
     "mobileNo":"someothernumber", 
     "password":"$^^HFKH*" 
     } 
    } 
    """ 

ध्यान दें कि बाहरी ब्रैकेट "{" और "व्यापार" है त्रुटि है

हालांकि। मुझे एक जेएसयूसेफ मिलता है। मैं जेसन के लिए पहले मामले में रीड कैसे लिखूं? इसके अलावा, मैं इसे सामान्य तरीके से कैसे कर सकता हूं?

कृपया मदद करें। इसके बाद के संस्करण के लिए

implicit val bsnsRds = (
     (__ \ "business" \ "name").read[String] ~ 
     (__ \ "business" \ "preferredUrl").read[String] ~ 
     (__ \ "business" \ "businessPhone").read[String] ~ 
     (__ \ "business" \ "retailer").read[Retailer](rltRds) 
    )(Business) 

उत्तर

7

बस रास्ते में business कुंजी जोड़ने

implicit val bsnsRds = ({ 
    val business = (__ \ "business") 
    (business \ "name").read[String] ~ 
    (business \ "preferredUrl").read[String] ~ 
    (business \ "businessPhone").read[String] ~ 
    (business \ "retailer").read[Retailer](rltRds) 
})(Business) 
+0

काम करता है। धन्यवाद nico_ekito। – user809564

+0

ठीक है, लेकिन क्या अंतर्निहित वैल बिजनेस रीड्स = जेसन.reads [बिजनेस] का उपयोग करने के लिए पहले फॉर्म से दूसरी ओर पास करने का एक आसान तरीका है? – Simon

+0

क्षमा करें, मुझे समाधान मिला, आप jsonValue \ "व्यवसाय" कर सकते हैं – Simon

संबंधित मुद्दे