2017-09-07 11 views
1

私には次のものがあります。失敗すると(0は3に等しくない)、理由はわかりません。何かご意見は?まずJSONのCirce Extractリスト

class Temp extends MyCirceExtendingClass { 
    def temp(json: Json) = { 
    root.otherNames.each.otherName.string.getAll(json) 
    } 
} 

val json = Json.fromString(
    s""" 
    |{ 
    | id: 1, 
    | name: "Robert", 
    | isEmployee: false, 
    | otherNames: [ 
    |  { 
    |   id: 1, 
    |   otherName: "Rob" 
    |  }, 
    |  { 
    |   id: 2, 
    |   otherName: "Bob" 
    |  }, 
    |  { 
    |   id: 3, 
    |   otherName: "Robby" 
    |  } 
    | 
    | ] 
    |} 
    """.stripMargin) 

val response = new Temp().temp(json) 
response.size shouldEqual 3 

答えて

1

Json.fromStringはJSONにそれをラップし、引数を解析しません。第二に、あなたのJson文字列が不正です:フィールド名は引用符で囲む必要があります。これらの問題を修正した後、レンズで正しい結果が得られます。

import cats.implicits._ 
import io.circe.optics.JsonPath.root 
import io.circe.parser.parse 
import io.circe.Json 

val json = parse(
    s""" 
    |{ 
    | "id": 1, 
    | "name": "Robert", 
    | "isEmployee": false, 
    | "otherNames": [ 
    |  { 
    |   "id": 1, 
    |   "otherName": "Rob" 
    |  }, 
    |  { 
    |   "id": 2, 
    |   "otherName": "Bob" 
    |  }, 
    |  { 
    |   "id": 3, 
    |   "otherName": "Robby" 
    |  } 
    | 
    | ] 
    |} 
""".stripMargin).getOrElse(Json.Null) 

root.otherNames.each.otherName.string.getAll(json) 

res1: List[String] = List(Rob, Bob, Robby)