首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“不是任何”来自Scala读取器的HashMap错误的成员

“不是任何”来自Scala读取器的HashMap错误的成员
EN

Stack Overflow用户
提问于 2013-01-18 00:28:12
回答 2查看 1.5K关注 0票数 0

如果你能提供一个简单的模板,我可以打开一个不同的库。我希望从解析的JSON中获得嵌套的映射输出。谢谢!

有关守则:

代码语言:javascript
运行
复制
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}}

EN

回答 2

Stack Overflow用户

发布于 2013-01-18 03:31:15

医生们parseFull返回一个包含Array[Any]Map[String, Any]Option[Any]。如果您确实是在解析JSON对象而不是数组,那么一种方法是:

代码语言:javascript
运行
复制
JSON.parseFull(input).get match {
  case map: Map[String, Any] => {
    // do anything you have to do with the map here, e.g.:
    println(map.keys)
  }
}
票数 0
EN

Stack Overflow用户

发布于 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]的值。这一点,您可以使用像keyskeySet这样的方法(以及为Map定义的所有其他方法)。

最后,请注意,对于该case,您将得到一个未经检查的类型警告,因为由于JVM类型的擦除,所讨论的值与所有其他Map类型是无法区分的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14390611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档