2013-03-26 18 views
13
"people": [ 
{ 
    "name": "Jack", 
    "age": 15 
}, 
{ 
    "name": "Tony", 
    "age": 23 
}, 
{ 
    "name": "Mike", 
    "age": 19 
} 
] 

जेएसओएन का एक नमूना है जो मैं पार्स करने की कोशिश कर रहा हूं। मैं प्रत्येक व्यक्ति पर एक foreach ऑपरेशन करने में सक्षम होना चाहता हूं और उनके नाम और उम्र मुद्रित करना चाहता हूं।प्ले 2 और स्कैला

मुझे पता है कि जेसन एरे को कैसे संभालना है जब यह एक आइटम या विशिष्ट क्रमांकित आइटम है। मुझे नहीं पता कि सभी वस्तुओं के माध्यम से कैसे पुनरावृत्ति करें।

क्या कोई मेरी मदद कर सकता है?

+0

नोट: मैं जेएसओएन के लिए Play के साथ एकीकृत की तुलना में पूरी तरह से अलग पुस्तकालय का उपयोग करने के लिए भी खुला हूं। लेकिन, मैं नहीं करना पसंद करूंगा। – Commander

उत्तर

23

Play JSON लाइब्रेरी के साथ ऐसा करने के कई तरीके हैं। मुख्य अंतर स्कैला केस क्लास का उपयोग है या नहीं।

एक सरल json

val json = Json.parse("""{"people": [ {"name":"Jack", "age": 19}, {"name": "Tony", "age": 26} ] }""") 

आप मामले वर्ग और Json मैक्रो का उपयोग कर सकते डेटा

import play.api.libs.json._ 

case class People(name: String, age: Int) 

implicit val peopleReader = Json.reads[People] 
val peoples = (json \ "people").as[List[People]] 
peoples.foreach(println) 

या मामले वर्ग के बिना स्वचालित रूप से पार्स करने के लिए, मैन्युअल रूप से

import play.api.libs.json._ 
import play.api.libs.functional.syntax._ 

implicit val personReader: Reads[(String, Int)] = (
    (__ \ "name").read[String] and 
    (__ \ "age").read[Int] 
).tupled 
val peoples = (json \ "people").as[List[(String, Int)]] 
peoples.foreach(println) 

को देखते हुए अन्य में शब्द, इस विषय पर बहुत पूर्ण दस्तावेज़ीकरण की जांच करें :) http://www.playframework.com/documentation/2.1.0/ScalaJson

+0

मेरा वास्तविक उपयोग I जेसन नमूना से थोड़ा अधिक जटिल है। क्या केवल नामों को पढ़ना संभव है और उम्र पूरी तरह से अनदेखा करना संभव है? या आप हमेशा पूरे जेसन को स्कैला केस क्लास में बदलना चाहिए? – Commander

+1

'(जेसन \" लोग "\\" नाम ")'? –

+0

यह मेरे लिए काम नहीं किया। यह कहता रहता है कि सूची [लोग]] के लिए कोई deserializer नहीं है। जेसन.reads भी मेरे लिए काम नहीं किया। मैं Play 2.0.4 – Commander

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