package com.jayway.jsonpath.spi.mapper; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.TypeRef; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonOrgMappingProvider implements MappingProvider { @Override public <T> T map(Object source, Class<T> targetType, Configuration configuration) { if(source == null){ return null; } if(targetType.equals(Object.class) || targetType.equals(List.class) || targetType.equals(Map.class)){ return (T) mapToObject(source); } return (T)source; } @Override public <T> T map(Object source, TypeRef<T> targetType, Configuration configuration) { throw new UnsupportedOperationException("JsonOrg provider does not support TypeRef! Use a Jackson or Gson based provider"); } private Object mapToObject(Object source){ if(source instanceof JSONArray){ List<Object> mapped = new ArrayList<Object>(); JSONArray array = (JSONArray) source; for (int i = 0; i < array.length(); i++){ mapped.add(mapToObject(array.get(i))); } return mapped; } else if (source instanceof JSONObject){ Map<String, Object> mapped = new HashMap<String, Object>(); JSONObject obj = (JSONObject) source; for (Object o : obj.keySet()) { String key = o.toString(); mapped.put(key, mapToObject(obj.get(key))); } return mapped; } else if (source == JSONObject.NULL){ return null; } else { return source; } } }