Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Need JSON in Value Format

Avatar

Level 4

Hi All,

 

I have written below JAVA  to get my JSON response from Content Fragment.

 

 

public static JsonArray getMultiValueAsArray(String contentPath, Value[] values, ResourceResolver resourceResolver) throws RepositoryException {
		JsonArray array = new JsonArray();
		if (values != null) {
			for (Value propertyValue : values) {
				JsonParser jsonParser = new JsonParser();
				JsonElement jsonObj = jsonParser.parse(propertyValue.getString());
				logger.info("jsonObj inside getMultiValueAsArray ===== "+jsonObj);
				array.add(jsonDataParser(contentPath, jsonObj, resourceResolver));
			}
		}
		return array;
	}

 

 

And my JSOn is coming below. Here my multifield is storing as STRING [] array , as shown below.

subnaik_2-1686884930346.png

 

subnaik_0-1686884757906.png

But here my requirement is that I want my JSOn format should come like below.

 

subnaik_1-1686884828148.png

Can somebody please let me know what kind of changes I need to do in my JAVA so the format will come like above.

 

Thanks & Regards

Subrat

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

@subnaik 

 

Option-1:

You will have to use a nested JsonObject to get the desired structure.

 

 

    public static JsonArray getMultiValueAsArray(String contentPath, Value[] values, ResourceResolver resourceResolver) throws RepositoryException {
        JsonArray array = new JsonArray();
        if (values != null) {
            for (Value propertyValue : values) {
                JsonObject propertyObj = new JsonObject();
                JsonObject nestedObj = new JsonObject();
                nestedObj.addProperty("value", propertyValue.getString());
                propertyObj.add(propertyValue, nestedObj);
                array.add(nestedObj);
            }
        }
        return array;
    }

 

Here:  

propertyObj is {"byline": {"value", "test2"}} and nestedObj is  {"value", "test2"}

Option-2: Usage of bean classes. Easier to understand and construct structure.

https://stackoverflow.com/questions/11692303/turning-a-bean-to-json-in-java


Aanchal Sikka

View solution in original post

3 Replies

Avatar

Community Advisor

Hi @subnaik 

You should create a POJO class according to the required JSON object and populate value from multifield object to newly created POJO. After that, you can convert the populated POJO class into JSON.

 

Regards,

Arpit Varshney

Avatar

Correct answer by
Community Advisor

@subnaik 

 

Option-1:

You will have to use a nested JsonObject to get the desired structure.

 

 

    public static JsonArray getMultiValueAsArray(String contentPath, Value[] values, ResourceResolver resourceResolver) throws RepositoryException {
        JsonArray array = new JsonArray();
        if (values != null) {
            for (Value propertyValue : values) {
                JsonObject propertyObj = new JsonObject();
                JsonObject nestedObj = new JsonObject();
                nestedObj.addProperty("value", propertyValue.getString());
                propertyObj.add(propertyValue, nestedObj);
                array.add(nestedObj);
            }
        }
        return array;
    }

 

Here:  

propertyObj is {"byline": {"value", "test2"}} and nestedObj is  {"value", "test2"}

Option-2: Usage of bean classes. Easier to understand and construct structure.

https://stackoverflow.com/questions/11692303/turning-a-bean-to-json-in-java


Aanchal Sikka

Avatar

Community Advisor

Hi @subnaik ,

 

To be true, the current JSON structure is more promising rather than the new one you want to achieve. It is less in size, more readable and easy to traverse. I would recommend you check the business requirement and try to propose the older one. 

 

Completing task is 'Job done', completing it right way is 'Achievement'.

 

Thanks,

Ritesh Mittal