groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From garneke <kenton.gar...@issinc.com>
Subject RE: when does JsonSlurper return LazyMap vs LazyValueMap ?
Date Fri, 03 Feb 2017 22:10:19 GMT
Thank you that helped a lot.
BTW the issue you posted https://issues.apache.org/jira/browse/GROOVY-7532  had example code
to walk the json map object and make hard references to objects ( LAX to Normal )

def slurpOpts = jsonSlurperLAX.parse(new File("test.conf"))
slurpOpts.each {k, v -> configOpts2.put(k, slurpOpts.get(k))}

I have a question about this simple example though.  If the json is more complex and has nested
maps this solution would be incomplete correct?

I decided to use the following but I don’t know if it is overkill or even valid.  Any thoughts?

  public Map<String, Object> deepCloneJsonMap(Object json){
    Map<String, Object> result = new LinkedHashMap();
    json.each {k, v ->
      if( v instanceof Map )
        result.put(k, deepCloneJsonMap(((Map<String,Object>)json).get(k)))
      else
        result.put(k, ((Map<String,Object>)json).get(k))
    }
    return result;
  }

Thanks again.


From: jwagenleitner [via Groovy] [mailto:ml-node+s329449n5738176h88@n5.nabble.com]
Sent: Friday, January 27, 2017 8:56 PM
To: Kenton Garner <kenton.garner@issinc.com>
Subject: Re: when does JsonSlurper return LazyMap vs LazyValueMap ?


On Thu, Jan 26, 2017 at 12:27 PM, garneke <[hidden email]</user/SendEmail.jtp?type=node&node=5738176&i=0>>
wrote:
Update:
I have determined that the difference in the return type has to do with the JsonSlurper type.
 The INDEX_OVERLAY returns a LazyValueMap.

That being said…
What is the correct way to add a node or otherwise modify the LazyValueMap objects?



I think the easiest way to do this if there are no nested objects is to create a new Map from
the LazyValueMap.  If there are no nested objects then the following would work.


def newMap = new LinkedHashMap(lazyValueMap)
newMap.mediaHash = mediaHash


If there are nested objects then it takes more work as you'd have to recurse/iterate over
each nested LazyValueMap and convert it as well.  There's an issue [1] requesting the ability
to convert to a regular map.

[1] https://issues.apache.org/jira/browse/GROOVY-7532



From: garneke [via Groovy] [mailto:[hidden email]</user/SendEmail.jtp?type=node&node=5738176&i=1>[hidden
email]<http://user/SendEmail.jtp?type=node&node=5738141&i=0>]
Sent: Thursday, January 26, 2017 12:31 PM
To: Kenton Garner <[hidden email]<http://user/SendEmail.jtp?type=node&node=5738141&i=1>>
Subject: Re: when does JsonSlurper return LazyMap vs LazyValueMap ?

-- Sorry for the first post ( formatting was lost )

Environment: groovy-all-2.4.6

In my environment I am seeing that JsonSlurper returns LazyMap in my test code using the groovyConsole
but it returns a LazyValueMap in my compiled java code.

I am trying to add a node to the json object and it works great in the groovyConsole but fails
in java.

This code works in the groovyConsole...


 def slurper = new JsonSlurper()
 def json = slurper.parseText( jsonTxt )
 json.put("mediaHash", mediaHash)
 // -- or  --
 json."mediaHash" = mediaHash


In the  groovyConsole  slurper.parseText() returns a LazyMap
But in Java it returns a LazyValueMap and I get the exception ... die("Not that kind of map");

What is the correct way to add a node and why do I get different results?
Thanks
________________________________
If you reply to this email, your message will be added to the discussion below:
http://groovy.329449.n5.nabble.com/when-does-JsonSlurper-return-LazyMap-vs-LazyValueMap-tp5738132p5738133.html
To unsubscribe from when does JsonSlurper return LazyMap vs LazyValueMap ?, click here.
NAML<http://groovy.329449.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>

________________________________
View this message in context: RE: when does JsonSlurper return LazyMap vs LazyValueMap ?<http://groovy.329449.n5.nabble.com/when-does-JsonSlurper-return-LazyMap-vs-LazyValueMap-tp5738132p5738141.html>

Sent from the Groovy Users mailing list archive<http://groovy.329449.n5.nabble.com/Groovy-Users-f329450.html>
at Nabble.com.


________________________________
If you reply to this email, your message will be added to the discussion below:
http://groovy.329449.n5.nabble.com/when-does-JsonSlurper-return-LazyMap-vs-LazyValueMap-tp5738132p5738176.html
To unsubscribe from when does JsonSlurper return LazyMap vs LazyValueMap ?, click here<http://groovy.329449.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5738132&code=a2VudG9uLmdhcm5lckBpc3NpbmMuY29tfDU3MzgxMzJ8LTIwMjIyNDI3NDY=>.
NAML<http://groovy.329449.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>




--
View this message in context: http://groovy.329449.n5.nabble.com/when-does-JsonSlurper-return-LazyMap-vs-LazyValueMap-tp5738132p5738425.html
Sent from the Groovy Users mailing list archive at Nabble.com.
Mime
View raw message