zoukankan      html  css  js  c++  java
  • 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);

     

  • 相关阅读:
    vim编辑器基本操作及文件权限,sudo命令等介绍
    centos的基本命令04
    linux的sed(增删改查)使用方法
    rm: cannot remove `xxx’: Operation not permitted问题的处理方案
    迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派
    迅为I.MX6Q开发板配不同分辨率不同尺寸液晶屏幕
    iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
    iTOP-4412开发板全新升级支持4G全网通模块
    迅为iMX6UL开发板低功耗高能效开发平台
    iTOP-4418/6818开发板支持双屏异显,双屏同显
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480467.html
Copyright © 2011-2022 走看看