diff --git a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DataNodeJsonVisitor.java b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DataNodeJsonVisitor.java
index 6f16735..054f3cf 100644
--- a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DataNodeJsonVisitor.java
+++ b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DataNodeJsonVisitor.java
@@ -52,6 +52,7 @@
     public void enterDataNode(DataNode dataNode,
                               DataNodeSiblingPositionType siblingType) {
         String nodeName = getNodeName(dataNode);
+        String valNamespace = null;
         switch (dataNode.type()) {
             case SINGLE_INSTANCE_NODE:
                 jsonBuilder.addNodeTopHalf(nodeName, JsonNodeType.OBJECT);
@@ -65,8 +66,13 @@
                 break;
             case SINGLE_INSTANCE_LEAF_VALUE_NODE:
                 LeafNode sLeafNode = (LeafNode) dataNode;
+                if (sLeafNode.valueNamespace() != null) {
+                    valNamespace = getModuleNameFromNameSpace(
+                            jsonSerializerContext, sLeafNode.valueNamespace());
+                }
                 jsonBuilder.addNodeWithValueTopHalf(nodeName,
-                                                    sLeafNode.asString());
+                                                    sLeafNode.asString(),
+                                                    valNamespace);
                 break;
             case MULTI_INSTANCE_LEAF_VALUE_NODE:
                 if (siblingType == FIRST_INSTANCE ||
@@ -74,7 +80,12 @@
                     jsonBuilder.addNodeTopHalf(nodeName, JsonNodeType.ARRAY);
                 }
                 LeafNode mLeafNode = (LeafNode) dataNode;
-                jsonBuilder.addValueToLeafListNode(mLeafNode.asString());
+                if (mLeafNode.valueNamespace() != null) {
+                    valNamespace = getModuleNameFromNameSpace(
+                            jsonSerializerContext, mLeafNode.valueNamespace());
+                }
+                jsonBuilder.addValueToLeafListNode(mLeafNode.asString(),
+                                                   valNamespace);
                 break;
             default:
                 break;
diff --git a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonBuilder.java b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonBuilder.java
index e240a50..8a02804 100644
--- a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonBuilder.java
+++ b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonBuilder.java
@@ -75,13 +75,18 @@
     }
 
     @Override
-    public void addNodeWithValueTopHalf(String nodeName, String value) {
+    public void addNodeWithValueTopHalf(String nodeName, String value,
+                                        String valNamespace) {
         if (isNullOrEmpty(nodeName)) {
             return;
         }
         appendField(nodeName);
         treeString.append(QUOTE);
         treeString.append(value);
+        if (valNamespace != null) {
+            treeString.append(COLON);
+            treeString.append(valNamespace);
+        }
         treeString.append(QUOTE);
         treeString.append(COMMA);
     }
@@ -102,13 +107,17 @@
     }
 
     @Override
-    public void addValueToLeafListNode(String value) {
+    public void addValueToLeafListNode(String value, String valNamespace) {
         if (isNullOrEmpty(value)) {
             return;
         }
 
         treeString.append(QUOTE);
         treeString.append(value);
+        if (valNamespace != null) {
+            treeString.append(COLON);
+            treeString.append(valNamespace);
+        }
         treeString.append(QUOTE);
         treeString.append(COMMA);
     }
diff --git a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonBuilder.java b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonBuilder.java
index f50fd60..3405a39 100644
--- a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonBuilder.java
+++ b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonBuilder.java
@@ -45,8 +45,10 @@
      *
      * @param nodeName name of child to be added
      * @param value    value of the child node
+     * @param valNamespace value namespace
      */
-    void addNodeWithValueTopHalf(String nodeName, String value);
+    void addNodeWithValueTopHalf(String nodeName, String value,
+                                 String valNamespace);
 
     /**
      * Adds a child with list of values to JSON data tree. This method is
@@ -62,8 +64,9 @@
      * Adds value to a leaf list node.
      *
      * @param value value to be added
+     * @param valNamespace value namespace
      */
-    void addValueToLeafListNode(String value);
+    void addValueToLeafListNode(String value, String valNamespace);
 
     /**
      * Adds the bottom half(a right brace/bracket) of a JSON
