2015-05-27 2 views
1

У меня есть этот образец URL: https://api.github.com/repos/jdan/isomer/languages Разница в выходе здесь заключается в том, что его обычно не так, как мы ожидаем, что JSON будет выглядеть как «label»: «value». Это «Language_Name»: «Количество строк».Scala: Convert Json JObject to List

Когда я называю это апи из моего кода лестницы:

val responseLangUrl: HttpResponse[String] = Http(url").asString 
val responseLangUrlJson = parse(responseLangUrl.body) 
println(responseLangUrlJson) 

Выхода:

JObject(List((Ruby,JInt(2622)))) 
JObject(List((CoffeeScript,JInt(3513)), (JavaScript,JInt(380)))) 

JINT незначителен для меня. Мне нужен список всех этих языков. Как я могу это извлечь?

https://github.com/json4s/json4s: В этой официальной ссылке есть пример для случая «label»: «value», но как я извлекаю что-то вроде этого типа i.e JSON, где у меня есть информация.

ответ

1

Простейший способ ИМО - преобразование JSON в Map[String, Any], а затем извлечение ключей.

parse(""" 
{ 
    "JavaScript": 54179, 
    "CSS": 508, 
    "HTML": 406 
} 
""").extract[Map[String, Any]].map(_._1) 
res0: scala.collection.immutable.Iterable[String] = List(JavaScript, CSS, HTML) 
+0

валь: HttpResponse [String] = HTTP (URL) .asString; val responseJson = parse (responseLangUrl.body); Этот ответ Json не имеет метода извлечения. Есть идеи? – user1756420

+1

Вам нужно ввести 'DefaultFormats' в область видимости. https://github.com/json4s/json4s#extracting-values ​​ – mohit

3
import org.json4s._ 
import org.json4s.jackson.JsonMethods._ 

implicit val formats = DefaultFormats 

parse(""" 
{ 
    "JavaScript": 54179, 
    "CSS": 508, 
    "HTML": 406 
} 
""").foldField(List(): List[String])((l, t) => t._1 :: l) 

результаты в ответ

res0: List[String] = List(HTML, CSS, JavaScript) 
+0

Отлично! Это сработало. Жаль, что я не смог бы это сделать. – user1756420

+0

Я считаю, что вы должны принять ответ –