2016-09-12 3 views
0

Ich versuche, diese json Zeichenfolge zu meinen anderen Methode zu übergeben, aber manchmal bekomme ich diesen Fehler,Scala spielen Json JSResultException Validierungsfehler

play.api.libs.json.JsResultException: JsResultException (Fehler: Liste ((, List (Validation (error.expected.jsstring, WrappedArray())))))

ich finde es seltsam, dass dies zufällig auftritt, manchmal ich nicht die Ausnahme und manchmal mache ich. Irgendwelche Ideen?

Hier ist, was meine Json sieht aus wie

val string = { 
    "first_name" : { 
    "type" : "String", 
    "value" : "John" 
    }, 
    "id" : { 
    "type" : "String", 
    "value" : "123456789" 
    }, 
    "last_name" : { 
    "type" : "String", 
    "value" : "Smith" 
    } 
} 

ich es wie

lesen
(string \ "first_name").as[String] 
+1

Welches Ergebnis erhalten Sie, wenn Sie keine Ausnahme erhalten? Weil der Wert des Feldes 'first_name' offensichtlich nicht nur ein String-Wert ist. – maks

+0

Und 'string' ist nicht Json. –

Antwort

1

(string \ "first_name") gibt JsValue nicht JsString so nicht as[String] nicht.

Aber wenn Sie first name value benötigen, können Sie tun

val firstName = ((json \ "first_name") \ "value").as[String] 
-1

Zunächst einmal können Sie keine String Objekt durchlaufen, so dass Ihre Eingabe in JsValue umgewandelt werden muss in der Lage sein, es zu durchqueren:

val json = Json.parse(string) 

dann die first_name attribut ist JsValue Typ und nicht ein String also, wenn Sie versuchen, die first_name Wert wie Sie erhalten, erhalten Sie immer eine JsResultException.

Ich kann nur das zufällige Auftreten von JsResultException durch eine Radom-Änderung in Ihrer first_name Feld json Struktur erklären. make sur Ihre stich Eingabe zu durchlaufen hat immer eine feste first_name archivierte Struktur.