如果你能提供一个简单的模板,我可以打开一个不同的库。我希望从解析的JSON中获得嵌套的映射输出。谢谢!
有关守则:
import scala.util.parsing.json.JSON
...
input = [Some file read in; see bottom for result]
val parsed = JSON.parseFull(input)
val parsedMap = (parsed.toList)(0)
println(parsedMap)
println(parsedMap.getClass())
println(parsedMap.keys)结果,包括底部的错误:
->地图(作者->地图(名称为-> iBuyCell,化身-> normal.png,用户名-> iBuyCell,id -> 4.62459933E8,链接-> http://twitter.com/iBuyCell),源-> twitterfeed,id -> 1e17bc84c345a800e742ed998fff 162,链接-> http://twitter.com/iBuyCell/statuses/186347162957918208,内容存储电话禁令对警察提出了挑战:教堂山成为州和国家上周唯一的城镇。http://t.co/xVCQMDU7,created_at -> Sun,2012年4月1日07:00:00 +0000,类型-> twitter),链接->地图(created_at -> List(Sun,20124.01:22:36 +0000),retweet_count -> List(3.0),标题-> List(电话禁令对警察提出挑战- Orange县- NewsObserver.com),url -> List(http://www.newsobserver.com/2012/04/01/1970433/police-challenged-by-cell-phone.html)),显著->地图(content -> Map(感情-> -1.0)),language -> Map(tag -> en),raw_links -> List(http://bit.ly/HwmJa6),twitter -> Map(来源-> twitterfeed,域-> List(bit.ly),text ->电话禁令)给警方带来了挑战:上周,教堂山成了该州和全国唯一的一个小镇。http://t.co/xVCQMDU7,链接-> List(http://bit.ly/HwmJa6),id -> 186347162957918208,created_at -> Sun,04月1日07:00 +0000,用户-> Map(utc_offset -> -14400.0,name -> iBuyCell,screen_name -> iBuyCell,location -> Text (Bez) Buy -> Text,url -> http://way.to/FreeFones,description ->需要快速兑现?)24小时短信我们的快速报价!同时,如果你需要一部新的免费手机,有载体和风格的选择,点击下面的网站,id_str -> 462459933,listed_count -> 1.0,followers_count -> 178.0,id -> 4.62459933E8,created_at ->清华,2012年1月12日23:58:34 +0000,lang -> en,time_zone -> Atlantic Time (加拿大),statuses_count -> 13069.0)) 类scala.collection.immutable.HashMap$HashTrieMap 错误:值键不是任何println(parsedMap.keys)的成员
如果有用的话,下面是讨论中的原始JSON:
{"interaction":{"author":{"avatar":"“http://twitter.com/iBuyCell”,“名称:”iBuyCell“,”用户名“:”iBuyCell“},”内容“:”电话“禁令给警方带来了挑战:上周,教堂山成为该州和全国唯一的一个小镇。2012年4月1日07:00+0000,“id”:“1e17bc84c345a800e0742ed998fff 162”,“链接”:“at:[“Sun”,2012年4月1日:22:36 +0000","retweet_count":3,”标题“:”电话禁令对警察构成挑战-奥兰治县- NewsObserver.com",“http://bit.ly/HwmJa6”,“:”raw_links“:{”raw_links“:{”http://bit.ly/HwmJa6“,”:-1},“twitter”:{“created_at”:“太阳,2012年4月1日07:00:00 +0000",”域“:”bit.ly“,"id":"186347162957918208",”链接“:”http://bit.ly/HwmJa6“,”源:“twitterfeed”,“短信”:“电话禁令给警察带来了挑战:教堂山上周成了该州和全国唯一的小镇。”在:清华,2012年1月12日23:58:34 +0000,“描述”:“需要快速兑现吗?”24小时短信我们的快速报价!同时,如果你需要一部新的免费手机,并选择载体和风格,点击以下网站!“,"followers_count":178,"id":462459933,"id_str":"462459933","lang":"en","listed_count":1,"location":"Text (Bez) Buy Kyts","name":"iBuyCell","screen_name":"iBuyCell","statuses_count":13069,“time_zone”:“大西洋时间(加拿大)”,"url":"偏移“:-14400}}“
发布于 2013-01-18 04:05:02
我复制了您的示例JSON,并使用它初始化了一个String,然后将其传递给scala.util.parsing.json.JSON.parseFull。如广告所示,结果是一个Option[Any]。然后在这个Option[Any]上使用Option[Any](在本例中它实际上是一个Some ),并得到一个单元素List[Any] (如果是None,则会得到一个空的List)。然后选择该List的第一个(也是唯一)元素,生成一个Any。
此时,手里拿着一个Any (它可以是任何东西,嗯……)您可以只调用在Any类型上定义的那些方法。当然,这不包括keys!
您可以通过模式匹配来完成这个过程,正如Martin所演示的。这类case子句有效地组合了一个isInstanceOf[Type] (类型测试)和一个asInstanceOf[Type] (强制转换),为您提供了一个静态支持类型Map[String, Any]的值。这一点,您可以使用像keys或keySet这样的方法(以及为Map定义的所有其他方法)。
最后,请注意,对于该case,您将得到一个未经检查的类型警告,因为由于JVM类型的擦除,所讨论的值与所有其他Map类型是无法区分的。
https://stackoverflow.com/questions/14390611
复制相似问题