• JAVA解析JSON


    一json-lib.jar开发包使用依赖包
    json-lib.jar开发包使用需要依赖包以下开发包:

    Json-lib requires (at least) the following dependencies in your classpath:
    * jakarta commons-lang 2.4
    * jakarta commons-beanutils 1.7.0
    * jakarta commons-collections 3.2
    * jakarta commons-logging 1.1.1
    * ezmorph 1.0.6
    .二.
    public class JsonUtil {


    public final static String JSON_ATTRIBUTE = "json";
    public final static String JSON_ATTRIBUTE1 = "json1";
    public final static String JSON_ATTRIBUTE2 = "json2";
    public final static String JSON_ATTRIBUTE3 = "json3";
    public final static String JSON_ATTRIBUTE4 = "json4";


    public static Object getDTO(String jsonString, Class clazz){
    JSONObject jsonObject = null;
    try{
    setDataFormat2JAVA();
    jsonObject = JSONObject.fromObject(jsonString);
    }catch(Exception e){
    e.printStackTrace();
    }
    return JSONObject.toBean(jsonObject, clazz);
    }


    public static Object getDTO(String jsonString, Class clazz, Map map){
    JSONObject jsonObject = null;
    try{
    setDataFormat2JAVA();
    jsonObject = JSONObject.fromObject(jsonString);
    }catch(Exception e){
    e.printStackTrace();
    }
    return JSONObject.toBean(jsonObject, clazz, map);
    }


    public static Object[] getDTOArray(String jsonString, Class clazz){
    setDataFormat2JAVA();
    JSONArray array = JSONArray.fromObject(jsonString);
    Object[] obj = new Object[array.size()];
    for(int i = 0; i < array.size(); i++){
    JSONObject jsonObject = array.getJSONObject(i);
    obj[i] = JSONObject.toBean(jsonObject, clazz);
    }
    return obj;
    }


    public static Object[] getDTOArray(String jsonString, Class clazz, Map map){
    setDataFormat2JAVA();
    JSONArray array = JSONArray.fromObject(jsonString);
    Object[] obj = new Object[array.size()];
    for(int i = 0; i < array.size(); i++){
    JSONObject jsonObject = array.getJSONObject(i);
    obj[i] = JSONObject.toBean(jsonObject, clazz, map);
    }
    return obj;
    }


    public static List getDTOList(String jsonString, Class clazz){
    setDataFormat2JAVA();
    JSONArray array = JSONArray.fromObject(jsonString);
    List list = new ArrayList();
    for(Iterator iter = array.iterator(); iter.hasNext();){
    JSONObject jsonObject = (JSONObject)iter.next();
    list.add(JSONObject.toBean(jsonObject, clazz));
    }
    return list;
    }


    public static List getDTOList(String jsonString, Class clazz, Map map){
    setDataFormat2JAVA();
    JSONArray array = JSONArray.fromObject(jsonString);
    List list = new ArrayList();
    for(Iterator iter = array.iterator(); iter.hasNext();){
    JSONObject jsonObject = (JSONObject)iter.next();
    list.add(JSONObject.toBean(jsonObject, clazz, map));
    }
    return list;
    }


    public static Map getMapFromJson(String jsonString) {
    setDataFormat2JAVA();
    JSONObject jsonObject = JSONObject.fromObject(jsonString);
    Map map = new HashMap();
    for(Iterator iter = jsonObject.keys(); iter.hasNext();){
    String key = (String)iter.next();
    map.put(key, jsonObject.get(key));
    }
    return map;
    }


    public static Object[] getObjectArrayFromJson(String jsonString) {
    JSONArray jsonArray = JSONArray.fromObject(jsonString);
    return jsonArray.toArray();
    }



    public static String getJSONString(Object object) throws Exception{
    String jsonString = null;
    //日期值处理器
    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
    if(object != null){
    if(object instanceof Collection || object instanceof Object[]){
    jsonString = JSONArray.fromObject(object, jsonConfig).toString();
    }else{
    jsonString = JSONObject.fromObject(object, jsonConfig).toString();
    }
    }
    return jsonString == null ? "{}" : jsonString;
    }

    private static void setDataFormat2JAVA(){
    //设定日期转换格式
    JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
    }

    public static void main(String[] arg) throws Exception{
    String s = "{status : 'success'}";
    System.out.println(" object : " + JsonUtil.getJSONString(s));
    }
    }


    import java.text.SimpleDateFormat;
    import java.util.Date;

    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonValueProcessor;


    public class JsonDateValueProcessor implements JsonValueProcessor {

    private String format = "yyyy-MM-dd HH:mm:ss";

    public JsonDateValueProcessor() {

    }

    三解析如下例子
    String rowidString="[{"kl_id":"2","kl_title":"Test date","kl_content":"Test date","kl_type":"1","id":"1"},{"kl_id":"2","kl_title":"Test","kl_content":"Test","kl_type":"1","id":"2"}]";

    JSONArray array = JSONArray.fromObject(rowidString);
    Object[] obj = new Object[array.size()];
    for(int i = 0; i < array.size(); i++){
    JSONObject jsonObject = array.getJSONObject(i);

    System.out.println(jsonObject.get("kl_id"));

    }

    public JsonDateValueProcessor(String format) {
    this.format = format;
    }

    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
    return process(value, jsonConfig);
    }

    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
    return process(value, jsonConfig);
    }

    private Object process( Object value, JsonConfig jsonConfig ) {
    if (value instanceof Date) {
    String str = new SimpleDateFormat(format).format((Date) value);
    return str;
    }
    return value == null ? null : value.toString();
    }

    public String getFormat() {
    return format;
    }

    public void setFormat(String format) {
    this.format = format;
    }

    }

    对于对象中有明确类型的对象属性,可不管;但对象中有集合属性的,由于类型不明确,所以要先明确类型:
    String jsonString = request.getParameter("json");
    //增加对象中的集合属性的类型以及对象元素中的对象属性的集合属性的类型
    Map clazzMap = new HashMap();
    //secondItems是FirstDTO里的集合属性
    clazzMap.put("secondItems", SecondDTO.class);
    //thirdItems是SecondDTO里的集合属性
    clazzMap.put("thirdItems", ThirdDTO.class);
    FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap);

     

  • 相关阅读:
    Cookie中的HttpOnly详解
    垃圾收集器Serial 、Parallel、CMS、G1
    Spring中ApplicationContextAware的用法
    Java IO包装流如何关闭
    Oracle数据库只读事务和无事务的区别
    protobuf和thrift对比
    Google的SPDY协议成为HTTP 2.0的基础
    在tomcat7中启用HTTPS的详细配置
    实现Spring RESTful服务的SSL
    大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480467.html
Copyright © 2020-2023  润新知