Thursday, 21 April 2016

How to convert a AEM Node into JSON using JsonItemWriter


How to convert a AEM Node into JSON representation


WE can easily convert an AEM node to its JSON representation by using the
org.apache.sling.commons.json.jcr.JsonItemWriter class.
This can be any type of Node like JCR node, AEM page, sling resource, cq:Page.. etc.

The simple code for doing this is


 StringWriter stringWriter = new StringWriter();
 JsonItemWriter jsonWriter = new JsonItemWriter(null);
 jsonWriter.dump(node, stringWriter, -1, true);
 String json = stringWriter.toString();



EXAMPLE:

1. Lets suppose we have the following node "/apps/geometrixx-gov/components/logo" that we need to convert to JSON.





2. Now we want to convert it into it's JSON representation.

3. Lets write a main method to do so.


package codermag.net;
import java.io.StringWriter;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.core.TransientRepository;
import org.apache.sling.commons.json.jcr.JsonItemWriter;

public class test {
 public static void main(String[] args) throws Exception {
  Repository repository = new TransientRepository();
  repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
  Session session = repository.login(new SimpleCredentials("admin","admin".toCharArray()));

  // Getting a particular node
  Node root = session.getRootNode();
  Node subContent = root.getNode("apps/geometrixx-gov/components/logo");

  
  // Iterating over the nodes and printing their names
  StringWriter stringWriter = new StringWriter();
  JsonItemWriter jsonWriter = new JsonItemWriter(null);
  jsonWriter.dump(subContent, stringWriter, -1, true);
  String json = stringWriter.toString();
  
  
  
  System.out.println(json);
 }
}


NOTE:  To run the program download the Jack Rabbit Jar File form
http://www.apache.org/dyn/closer.cgi/jackrabbit/2.8.1/jackrabbit-standalone-2.8.1.jar and place it in your project build path.


5. This code will connect to the AEM JCR and get the node.Then it will convert it to JSON.

OUTPUT:


{
  "jcr:title": "Logo",
  "jcr:created": "Wed Aug 05 2015 07:33:54 GMT+0530",
  "jcr:createdBy": "admin",
  "jcr:primaryType": "cq:Component",
  "sling:resourceSuperType": "foundation/components/logo",
  "componentGroup": ".hidden",
  "logo.jsp": {
    "jcr:created": "Wed Aug 05 2015 07:33:54 GMT+0530",
    "jcr:createdBy": "admin",
    "jcr:primaryType": "nt:file",
    "jcr:content": {
      "jcr:lastModifiedBy": "admin",
      ":jcr:data": 2185,
      "jcr:lastModified": "Wed Aug 05 2015 07:33:54 GMT+0530",
      "jcr:primaryType": "nt:resource",
      "jcr:mimeType": "text/plain",
      "jcr:uuid": "b8261ccb-ecd4-4c01-bbe1-fb1371a8c910"
    }
  }
}




Please go through the JSON data and the screenshot of the LOGO Node to understand better.


No comments:

Post a Comment

Coder Magnet
CoderMagnet is full of resources from our daily development activities. It has solutions for common problematic scenarios in technologies like Java 8, AEM, JCR and also occasionally gives you tips on Blogger as well.