2016-04-25 7 views
1

Ich benutze Scala Vorlage mit Playframework. Ich bin Tring einen Wert von json zu lesen, aber ich bin immer JSErrorScala Vorlage nicht in der Lage zu JSON

JsError (List ((/ "aktiv \" an Land "\" sunnyvale“, List (Validation (error.path.missing, WrappedArray())))))

Hier ist meine JsonString

rfrdetails = { 
    "active": { 
     "onshore": { 
      "sunnyvale": 10, 
      "cupertino": 20, 
      "sfo": 8 
     } 
    } 
} 

Mein template.scala.html

@(rfrdetails : String) 

@import play.api.libs.json._ 
@rfrjsonex(label:String) = @{ 
    println(label) 
    var json: JsValue = Json.parse(rfrdetails) 
    ((__ \ label).read[Int]).reads(json) 
} 

ruft den obigen wiederverwendbaren Code wie unten auf.

<tr> 
<td>@rfrjsonex("\"active" + "\\" + "\"onshore\"" + "\\" + "\"sunnyvale\"")</td> 
</tr> 

Der wiederverwendbare Code funktioniert gut, wenn ich den json Pfad in Codeblock geben

@rfrjsonex(label:String) = @{ 
    println(label) 
    var json: JsValue = Json.parse(rfrdetails) 
    ((__ \ "active"\"onshore"\"sunnyvale").read[Int]).reads(json) 
} 

Wo am'I falsch gehen. Nicht sicher, ob es sehr albern ist. Aus dem Fehler kann ich im JsError sehen, dass "/" vor "aktiv" steht, nicht sicher, wie es angehängt wird. JsError (List ((/ "aktiv \" an Land "\" sunnyvale“

Jede Hilfe wird geschätzt. Vielen Dank im Voraus.

+0

Gut formatierte Frage zum ersten Mal Poster – dinotom

Antwort

2

Das Symbol \ kein Literal ist. Es ist eine Methode benutzt, um mit Scala Infixschreibweise System.

__ \ "a" \ "b" 

ist syntaktischer Zucker für

(JsPath.\("a")).\("b") 

so versuchen, den Pfad als String zu verpacken und dann geben sie als Parameter keinen Sinn macht. Sie können nur im String para passieren Meter zu jeder Methode, aber Sie müssen genau wissen, wie viele Ebenen Sie versuchen, in die JsValue-Struktur vor der Zeit zu gehen.

+0

Vielen Dank. Das hat geholfen. – user3290656

+2

Ich übergebe jetzt den JsPath selbst als Parameter. ' @rfrjsonex ((JsPath. \ (" Aktiv ")). \ (" Onshore ") \ (" sunnyvale "))' – user3290656