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

     

  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480467.html
Copyright © 2011-2022 走看看