Package edu.isi.karma.util

Source Code of edu.isi.karma.util.JSONUtil

/*******************************************************************************
* Copyright 2012 University of Southern California
*
* Licensed 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.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California.  For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/
package edu.isi.karma.util;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.Iterator;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JSONUtil {

  private static Logger logger = LoggerFactory.getLogger(JSONUtil.class);

  public static String enclose(String x, String delimiter) {
    return delimiter + x + delimiter;
  }

  public static String doubleQuote(String x) {
    return enclose(x, "\"");
  }

  public static String jsonLast(Enum<?> key, String value) {
    return doubleQuote(key.name()) + " : " + JSONObject.quote(value);
  }

  public static String jsonLast(Enum<?> key, int value) {
    return doubleQuote(key.name()) + " : " + value;
  }

  public static String jsonLast(Enum<?> key, boolean value) {
    return doubleQuote(key.name()) + " : " + value;
  }

  public static String json(Enum<?> key, String value) {
    return doubleQuote(key.name()) + " : " + JSONObject.quote(value)
        + " , ";
  }

  public static String json(Enum<?> key, boolean value) {
    return doubleQuote(key.name()) + " : " + value + " , ";
  }

  public static String json(Enum<?> key, int value) {
    return doubleQuote(key.name()) + " : " + value + " , ";
  }

  public static String jsonStartList(Enum<?> key) {
    return JSONUtil.doubleQuote(key.name()) + " : [";
  }

  public static String jsonStartObject(Enum<?> key) {
    return JSONUtil.doubleQuote(key.name()) + " : ";
  }

  public static String truncateForHeader(String x, int maxChars) {
    if (x.length() > maxChars) {
      if (maxChars > 5) {
        String prefix = x.substring(0, maxChars - 5);
        String suffix = x.substring(x.length() - 3, x.length());
        return prefix + ".." + suffix;
      } else {
        return x.substring(0, maxChars - 2) + "..";
      }
    } else {
      return x;
    }
  }

  public static String truncateCellValue(String x, int maxChars) {
    if (x.length() > maxChars) {
      return x.substring(0, Math.max(3, maxChars)) + " ...";
    } else {
      return x;
    }
  }

  public static String readerToString(Reader reader) {
    StringBuffer fileData = new StringBuffer(1000);
    BufferedReader bufferedReader = new BufferedReader(reader);
    char[] buf = new char[1024];
    int numRead = 0;
    try {
      while ((numRead = bufferedReader.read(buf)) != -1) {
        String readData = String.valueOf(buf, 0, numRead);
        fileData.append(readData);
        buf = new char[1024];
      }
      bufferedReader.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return fileData.toString();
  }

  public static JSONArray createJSONArray(JSONTokener tokener) {
    JSONArray result = null;
    try {
      result = new JSONArray(tokener);
    } catch (JSONException e1) {
      // Don't do anything.
    }
    return result;
  }

  public static JSONObject createJSONObject(JSONTokener tokener) {
    JSONObject result = null;
    try {
      result = new JSONObject(tokener);
    } catch (JSONException e1) {
      // Don't do anything.
    }
    return result;
  }

  public static Object createJson(String jsonString) {
    Object result = createJSONObject(new JSONTokener(jsonString));
    if (result == null) {
      result = createJSONArray(new JSONTokener(jsonString));
    }
    if (result == null) {
      logger.error("Could not parse as JSONObject or JSONArray");
    }
    return result;
  }

  public static Object createJson(Reader reader) {
    // This is an ugly, and surely inefficient solution, but I can't figure
    // out a way around it.
    String x = readerToString(reader);
    return createJson(x);
  }

  public static String prettyPrintJson(String jsonString) {
    try {
      Object o = createJson(jsonString);
      if (o instanceof JSONObject) {
        return ((JSONObject) o).toString(4);
      } else if (o instanceof JSONArray) {
        return ((JSONArray) o).toString(4);
      } else {
        return "not JSON";
      }
    } catch (JSONException e) {
      e.printStackTrace();
      return "not JSON";
    }
  }
 
  public static boolean compareJSONObjects(Object obj1, Object obj2) throws JSONException {
    if(obj1 instanceof JSONArray && obj2 instanceof JSONArray) {
      JSONArray a1 = (JSONArray) obj1;
      JSONArray a2 = (JSONArray) obj2;
     
      if(a1.length() != a2.length())
        return false;
     
      for (int i=0; i<a1.length(); i++) {
        Object a = a1.get(i);
        Object b = a2.get(i);
       
        if(!compareJSONObjects(a, b))
          return false;
      }
     
    } else if (obj1 instanceof JSONObject && obj2 instanceof JSONObject) {
      JSONObject a1 = (JSONObject) obj1;
      JSONObject a2 = (JSONObject) obj2;
     
      if(a1.length() != a2.length())
        return false;
     
      @SuppressWarnings("rawtypes")
      Iterator keys = a1.keys();
      while (keys.hasNext()) {
        String key = (String) keys.next();
        Object val1 = a1.get(key);
        Object val2 = null;
        try {
          val2 = a2.get(key);
        } catch (JSONException e) {
          return false;
        }
        if(!compareJSONObjects(val1, val2))
          return false;
      }
     
    } else if (obj1 instanceof String && obj2 instanceof String) {
      return obj1.toString().equals(obj2.toString());
    } else if (obj1 instanceof Integer && obj2 instanceof Integer) {
      return (Integer)obj1 == (Integer)obj2;
    } else if (obj1 instanceof Double && obj2 instanceof Double) {
      return (Double)obj1 == (Double)obj2;
    } else if (obj1 instanceof Long && obj2 instanceof Long) {
      return (Long)obj1 == (Long)obj2;
    } else if (obj1 instanceof Boolean && obj2 instanceof Boolean) {
      return (Boolean)obj1 == (Boolean)obj2;
    } else if (obj1 == JSONObject.NULL && obj2 == JSONObject.NULL) {
      return true;
    }
    else
      return false;
   
    return true;
  }

  public static void writeJsonFile(Object o, String name) {
    try {
      FileWriter outFile = new FileWriter(name);
      PrintWriter pw = new PrintWriter(outFile);
      if (o instanceof JSONObject) {
        JSONObject x = (JSONObject) o;
        pw.println(x.toString(2));
      } else if (o instanceof JSONArray) {
        JSONArray x = (JSONArray) o;
        pw.println(x.toString(2));
      }
      outFile.close();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }
}
TOP

Related Classes of edu.isi.karma.util.JSONUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.