目前通过“Scala编程,第一版”阅读/工作,特别是第31章:Combinator Parsing
作者描述了如何解析JSON文件并提供以下更高级的转换:
def obj: Parser[Map[String, Any]] = // Can be improved
"{"~repsep(member, ",")~"}" ^^
{ case "{"~ms~"}" => Map() ++ ms }
后来改进为:
def obj: Parser[Map[String, Any]] =
"{"~> repsep(member, ",") <~"}" ^^ (Map() ++ _)
但是,当我将此类代码输入我的IDE(IntelliJ IDEA 14.03)时,编译器会拒绝它:
JSON.this.type#Parser [Iterable [Any]]类型的表达式没有 符合预期类型JSON.this.type #Parser [Map [String,Any]]
当然,我可以通过将obj的类型更改为Parser [Iterable [Any]]来消除此错误,但这不会产生预期的结果。
这样做的正确方法是什么?
无论价值多少,我都在使用jdk 1.7.0_71和sdk 2.11.5
答案 0 :(得分:1)
这取决于&#34;成员&#34;的解析器。 我猜你使用的解析器如下:
def member: Parser[Any]
与示例中一样,尝试使用成员解析器:
def member: Parser[(String, Any)] =
stringLiteral~":"~value ^^
{ case name~":"~value => (name, value) }