2016-04-28 10 views
5

प्ले जेनरेशन से यह JSON स्वचालित मानचित्रण उदाहरण विफल रहता है। क्यूं कर? https://www.playframework.com/documentation/2.5.x/ScalaJsonAutomatedस्कैला प्ले जेसन कोई अनुपयोगी या अनुपयोगी कार्य फ़ंक्शन

libraryDependencies += "com.typesafe.play" %% "play" % "2.5.0" 
--- 
import play.api.libs.json._ 
case class Resident(name: String, age: Int, role: Option[String]) 
implicit val residentWrites = Json.writes[Resident] 
println(Json.toJson(Resident("john", 33, None))) 
--- 
Error: No unapply or unapplySeq function found 
     implicit val residentWrites = Json.writes[Resident] 
+0

मेरे लिए यह बस असफल नहीं होता है। मैं एएमएम प्रतिलिपि खोलता हूं, 'load.ivy (" com.typesafe.play "%%" play "%" 2.5.0 ") के माध्यम से निर्भरता प्राप्त करें और '4" नाम प्राप्त करने वाले कोड की अपनी 4 पंक्तियों को पेस्ट करें: "जॉन" , "उम्र": 33} '। यह त्रुटि आमतौर पर तब होती है जब आपकी 'कक्षा' 'केस क्लास' नहीं होती है, लेकिन सबकुछ ठीक है। –

+0

वाह, मुझे अम्मोनियों के बारे में पता नहीं था! यह बहुत अच्छा लग रहा है, मैं इसे अब कोशिश करूँगा –

+0

हां, यह एएमएम प्रतिलिपि से भी मेरे लिए काम करता है। : ओ मैं फिर से अपनी परियोजना –

उत्तर

6

समस्याग्रस्त कोड और अधिक या कम इस तरह देखा:

import play.api.libs.json._ 

object Test { 
    def main(args: Array[String]): Unit = { 
    case class Resident(name: String, age: Int, role: Option[String]) 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

यहां मुद्दा यह था कि इस मैक्रो जाहिरा तौर तरीकों के अंदर परिभाषित वर्गों के लिए काम नहीं करता। यह एक परेशान सीमा नहीं है हालांकि हम इस तरह की चीजें नहीं करते हैं।

मुद्दा वर्ग डीईएफ़ को हल करने के लिए कहीं और ले जाया जा सकता वस्तु स्तर की तरह

object Test { 
    case class Resident(name: String, age: Int, role: Option[String]) 

    def main(args: Array[String]): Unit = { 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

या फ़ाइल स्तर

case class Resident(name: String, age: Int, role: Option[String]) 

object Test { 
    def main(args: Array[String]): Unit = { 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

मैं, समझते हैं कि यह कम से कम उदाहरण देखने के लिए परीक्षण प्रयोजनों के लिए केवल था, लेकिन मैं अभी भी उल्लेख करूंगा कि हम आमतौर पर कक्षाओं को Writes के साथ परिभाषित करते हैं।

object Resident { 
    implicit val residentWrites = Json.writes[Resident] 
} 

case class Resident(name: String, age: Int, role: Option[String]) 

इस तरह, जब भी आप Resident आयात करते हैं, अपने लेखन निहित दायरे में होगा।

+0

त्रुटि वर्ग डीफ़ ऑब्जेक्ट स्तर पर था जब त्रुटि पहली बार दिखाई दी। समस्या को दिखाने के लिए मैंने एक न्यूनतम उदाहरण बनाते समय इसे विधि के अंदर ले जाया। हालांकि मुझे एहसास नहीं हुआ कि मुझे एक अलग प्रकार की त्रुटि मिल रही है। –

+0

ठीक है अगर आप उस दूसरी त्रुटि को पुन: पेश कर सकते हैं तो मैं उसे भी संबोधित कर सकता हूं। –

+0

thx। मुझे समस्या मिली, एक निर्भरता के लिए एक अंतर्निहित 'Json.write' गायब था। –

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