GSONDataTypeConverter.java
/*
* Copyright (c) 2019, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.synapse.commons.json.jsonprocessor.utils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* This class provides functionality to convert between GSON data structures.
*/
public class GSONDataTypeConverter {
// use without instantiating
private GSONDataTypeConverter() {
}
/**
* Given a string contains a json array, this method will return the Map.
* This is where the single element array correction happens.
*
* @param input JsonArray as a string.
* @return map entry of json array.
*/
public static Map.Entry<String, JsonElement> getMapFromString(String input) {
JsonParser parser = new JsonParser();
JsonObject temp = new JsonObject();
JsonElement inputElement = parser.parse(input);
JsonArray arrayObject = null;
if (inputElement.isJsonArray()) {
arrayObject = (JsonArray) parser.parse(input);
} else if (inputElement.isJsonPrimitive() || inputElement.isJsonObject()) {
arrayObject = new JsonArray();
arrayObject.add(inputElement);
}
temp.add("test", arrayObject);
//converting Set<Map.Entry<String, JsonElement>> to Map.Entry<String, JsonElement>
//the key 'test' will be removed eventually
Set<Map.Entry<String, JsonElement>> entries = temp.entrySet();
Iterator itr = entries.iterator();
return (Map.Entry<String, JsonElement>) itr.next();
}
/**
* Given a json array, this method will return the map
*
* @param array input array.
* @return map entry of json array
*/
public static Map.Entry<String, JsonElement> getMapFromJsonArray(JsonArray array) {
JsonObject sample = new JsonObject();
sample.add("test", array);
Set<Map.Entry<String, JsonElement>> entries = sample.entrySet();
return entries.iterator().next();
}
}