2013-04-08 3 views
0

Я получаю следующее в результате использования scala json parse.шаблон соответствует любому в списке

import scala.util.parsing.json.JSON._ 
val j: String = """["this",["a","b",["c","d"]]]""" 
val parse_test=parseFull(j) 

теперь от этого я получаю результат Опция [Любой]

я могу использовать get для получения результатов (в данном случае я не обеспокоен недопустимый формат JSON, так что это должно быть безопасным, не так ли?)

parse_test.get 
res26: Any = List(this, List(a, b, List(c, d))) 

Теперь, как я должен идти о переходе от этого Any к List, что я ожидал? Я предполагаю, что должен использовать сопоставление с образцом, но я не могу понять это. Любая помощь будет высоко ценится

+0

Не могли бы вы уточнить, что не хватает для вас? Что вы подразумеваете под «списком», который я ожидал? Какой _was_ список, который вы ожидали? Буквально. – Floris

+0

в основном, я имею в виду, я бы хотел, чтобы результат был уже по списку, так как я мог делать 'parse_test.get.head' и т. Д. Строка json, которую я хочу, я хочу манипулировать как список формы List (а, список (а, б, Список (в, г))). Имеет ли это смысл? – JPC

+0

Вы говорите, что вы получаете 'List (this, List (a, b, List (c, d)))', но вы хотите 'List (a, List (a, b, List (c, d)))'? Нет, у тебя нет смысла. Что случилось с «этой» строкой? – Floris

ответ

0

Что вы могли бы сделать это складка спичкой узора и гипсом:

test_result.fold[List[String]](Nil){ 
    case _ :: list :: _ => list.asInstanceOf[List[String]] 
    case _ => Nil 
} 

Предполагая, что вы пытаетесь выбросить из первого элемента и что второй элемент список, который вы хотели.

Edit:

Имейте в виду, что если второй элемент не список этот бросок вызовет исключение. Это действительно ужасно дилинг с List [Любой] и пытается расшифровать, что там ...

0

Вот мое решение:

scala> val Some(xs @ List(_*)) = parse_test 
xs: List[Any] = List(this, List(a, b, List(c, d))) 
+0

Это приведет к ошибке совпадения, если значение parse_test равно None, но после прочтения вопроса о плакате, возможно, ему все равно. Я бы подумал, что что-то вроде десериализации должно иметь такую ​​безопасность, но * пожать плечами *. – coltfred

Смежные вопросы