Advertisement
Guest User

Untitled

a guest
Jan 15th, 2015
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.96 KB | None | 0 0
  1. import org.json4s._
  2. import org.json4s.jackson.JsonMethods._
  3.  
  4. val a = parse(""" { "id":"6988", "signatories":[ { "fields":[ { "name":"fstname", "value":"Bruce" }, { "name":"sndname", "value":"Lee" }, { "name":"email", "value":"bruce.lee@company.com" }, { "name":"sigco", "value":"Company" }, { "name":"mobile", "value":"0760000000" } ] }, { "fields":[ { "name":"fstname", "value":"" }, { "name":"sndname", "value":"" }, { "name":"email", "value":"" }, { "name":"mobile", "value":"" }, { "name":"sigco", "value":"" } ] } ] } """)
  5.  
  6. val v = a.\("signatories").\("fields")(1).transform {
  7.    // Each JArray is made of objects. Find fields in the object with key as name and value as fstname
  8.    case obj: JObject => obj.findField(_.equals(JField("name", JString("fstname")))) match {
  9.      case None => obj //Didn't find the field. Return the same object back to the array
  10.      // Found the field. Change the value
  11.      case Some(x) =>
  12.        obj.transformField { case JField(k, v) if k == "value" => JField(k, JString("New name")) }
  13.    }
  14. }
  15.  
  16. // how do I get the fields[1] into the original JObject "a"
  17. val merged = a.replace(List("fields"), v)
  18.  
  19. // convert back to json
  20. println(compact(render(merged)))
  21.  
  22. /*
  23. The result I'm getting
  24. {
  25.     "id": "6988",
  26.     "signatories": [
  27.         {
  28.             "fields": [
  29.                 {
  30.                     "name": "fstname",
  31.                     "value": "Bruce"
  32.                 },
  33.                 {
  34.                     "name": "sndname",
  35.                     "value": "Lee"
  36.                 },
  37.                 {
  38.                     "name": "email",
  39.                     "value": "[email protected]"
  40.                 },
  41.                 {
  42.                     "name": "sigco",
  43.                     "value": "Company"
  44.                 },
  45.                 {
  46.                     "name": "mobile",
  47.                     "value": "0760000000"
  48.                 }
  49.             ]
  50.         },
  51.         {
  52.             "fields": [
  53.                 {
  54.                     "name": "fstname",
  55.                     "value": ""
  56.                 },
  57.                 {
  58.                     "name": "sndname",
  59.                     "value": ""
  60.                 },
  61.                 {
  62.                     "name": "email",
  63.                     "value": ""
  64.                 },
  65.                 {
  66.                     "name": "mobile",
  67.                     "value": ""
  68.                 },
  69.                 {
  70.                     "name": "sigco",
  71.                     "value": ""
  72.                 }
  73.             ]
  74.         }
  75.     ]
  76. }
  77. */
  78.  
  79.  
  80. /* And here's the result I'm trying to achieve, with the value for "fstname" in the second fields array is set to "New name"
  81.  
  82. {
  83.     "id": "6988",
  84.     "signatories": [
  85.         {
  86.             "fields": [
  87.                 {
  88.                     "name": "fstname",
  89.                     "value": "Bruce"
  90.                 },
  91.                 {
  92.                     "name": "sndname",
  93.                     "value": "Lee"
  94.                 },
  95.                 {
  96.                     "name": "email",
  97.                     "value": "[email protected]"
  98.                 },
  99.                 {
  100.                     "name": "sigco",
  101.                     "value": "Company"
  102.                 },
  103.                 {
  104.                     "name": "mobile",
  105.                     "value": "0760000000"
  106.                 }
  107.             ]
  108.         },
  109.         {
  110.             "fields": [
  111.                 {
  112.                     "name": "fstname",
  113.                     "value": "New name"
  114.                 },
  115.                 {
  116.                     "name": "sndname",
  117.                     "value": ""
  118.                 },
  119.                 {
  120.                     "name": "email",
  121.                     "value": ""
  122.                 },
  123.                 {
  124.                     "name": "mobile",
  125.                     "value": ""
  126.                 },
  127.                 {
  128.                     "name": "sigco",
  129.                     "value": ""
  130.                 }
  131.             ]
  132.         }
  133.     ]
  134. }
  135. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement