Reputation: 9724
Given the following JSON...
{
"firstName": "Joe",
"lastName": "Grey",
...
"addresses":
[
{
"name": "Default",
"street": "...",
...,
"isDefault": true
},
{
"name": "Home",
"street": "...",
...,
"isDefault": false
},
{
"name": "Office",
"street": "...",
...,
"isDefault": false
}
]
}
... how do I get let's say the item with name
equal to Home
?
{
"name": "Home",
"street": "...",
...,
"isDefault": false
}
Thanks.
Upvotes: 2
Views: 854
Reputation: 9724
The links suggested by user1502304 does not provide any info on this topic. Furthermore, according to this discussion the current JSON library has some limitations... and as mentioned here the good alternative is JsZipper
. That said, here below is how to get an item by value:
scala> import play.api.libs.json._
import play.api.libs.json._
scala> import play.api.libs.json.extensions._
import play.api.libs.json.extensions._
scala> val user = Json.parse("""
| {
| "firstName": "Joe",
| "lastName": "Grey",
| "isDefault": false,
| "addresses":
| [
| {
| "name": "Default",
| "street": "one",
| "isDefault": true
| },
| {
| "name": "Home",
| "street": "two",
| "isDefault": false
| },
| {
| "name": "Office",
| "street": "three",
| "isDefault": false
| }
| ]
| }""")
json: play.api.libs.json.JsValue = {"firstName":"Joe","lastName":"Grey","isDefault":false,"addresses":[{"name":"Default","street":"one","isDefault":true},{"name":"Home","street":"two","isDefault":false},{"name":"Office","street":"three","isDefault":false}]}
scala> JsZipper(json).findByValue(_ \ "name" == JsString("Default")).value
res8: play.api.libs.json.JsValue = {"name":"Default","street":"one","isDefault":true}
I hope it helps.
Upvotes: 1