2016-07-15 20 views
1

ich json haben (zum Beispiel):scala json4s wie i Feld von Zustand zu extrahieren

{ 
    "name": "", 
    "count": 2, 
    "children": { 
    "app_open": { 
     "name": "app_open", 
     "count": 1, 
     "children": { 
     "session_end": { 
      "name": "session_end", 
      "count": 1, 
      "children": {} 
     } 
     } 
    }, 
    "app_install": { 
     "name": "app_install", 
     "count": 2, 
     "children": { 
     "session_end": { 
      "name": "session_end", 
      "count": 2, 
      "children": {} 
     } 
     } 
    }, 
    "app_instal1l": { 
     "name": "app_instal1l", 
     "count": 3, 
     "children": { 
     "app_open": { 
      "name": "app_open", 
      "count": 3, 
      "children": { 
      "session_end": { 
       "name": "session_end", 
       "count": 3, 
       "children": {} 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Ich brauche alle Zählung zu extrahieren, wobei "name" = "app_open".

Und ich versuche, tut es mit json4s Bibliothek:

val name = jsonInput filterField { 
      case JField("name", "app_open") => true 
      case _ => false 
     } 
println("name = " + URL) 

Und ich schlage vor, in der Ausgabe i mit nur etwas haben werden "app_open", aber ich habe:

name = List((name,JString(app_open)), (name,JString(session_end)), 
(name,JString(app_open)), (name,JString(session_end))) 

Was i‘ m hier falsch machen? Vielen Dank!

Antwort

2

Compiler Fehler ist ziemlich klar:

Error: type mismatch; 
found : String("app_open") 
required: org.json4s.JsonAST.JValue 
    case JField("name", "app_open") => true 
        ^

Das ist wegen type JField = (String, JValue). Verwenden Sie stattdessen JValueString wie folgt aus:

val name = jsonInput filterField { 
    case JField("name", JString("app_open")) => true 
    case _ => false 
} 
+0

Beachten Sie, dass JField eine Art Alias ​​ist für '' '(String, JValue)' '' und ohne JField –

+0

Hm abgestimmt werden konnte, habe ich keine Fehler bekam während der Kompilierung aber deine Lösung funktioniert) Danke! – ANTVirGEO