• 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);

     

  • 相关阅读:
    python算法:嵌套数组转变成一维数组
    python算法:约瑟夫问题
    python的加密算法(1):反转加密
    算法:桶排序
    正则表达式学习(3):相关符号解释
    代码这样写更优雅(1)
    正则表达式学习(2)
    神奇的Bank系统之旅哦
    C#之第五单元的项目打印购物单
    C#语言的基础
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480466.html
Copyright © 2020-2023  润新知