JSON 字符串 与 java 对象的转换

jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html

// 引入相应的包 json-lib-2.2.3.jar

对象转json:

        IorderIssue iorderIssue = new IorderIssue();
        
        SegmentInfo segmentInfo = new SegmentInfo();
        segmentInfo.setIorderIssue(iorderIssue);
        List<SegmentInfo> list = new ArrayList<SegmentInfo>();
        list.add(segmentInfo);
        iorderIssue.setSegmentInfos(list);
        
        List<ReqPassenger> list1 = new ArrayList<ReqPassenger>();
        ReqPassenger reqPassenger = new ReqPassenger();
        reqPassenger.setBusinessNo("111");
        reqPassenger.setIorderIssue(iorderIssue);
        list1.add(reqPassenger);
        iorderIssue.setReqPassengers(list1);
        
        
        JsonConfig conf = new JsonConfig();
        conf.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
        JSONObject object = JSONObject.fromObject(iorderIssue,conf);

其中conf.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);可防止hibernate模式下的关联关系子对象中包含父对象造成死循环。

json转对象:

1.这个方法 JSONSerializer.toJava();

    /**
     * 创建订单
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView createOrder(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String requestStr = MyString.inputStream2String(request.getInputStream());
        
        JsonConfig filterNullConfig = new JsonConfig();//先把为null的属性过滤掉,防止下边的日期转换报错
        filterNullConfig.setJsonPropertyFilter(new PropertyFilter() {
            
            public boolean apply(Object clazz, String name, Object value) {
                boolean isFilter = false;
                if(value==null||"".equals(value)){
                    isFilter = true;
                }
                return isFilter;
            }
        });
        JSONObject requestJson = JSONObject.fromObject(requestStr,filterNullConfig);
    

        try{
            //日期转换
            String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd","yyyy-MM-dd HH:mm"};    
            JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats)); 

            JsonConfig jsonConfig = new JsonConfig();
            jsonConfig.setRootClass(IorderIssue.class);
            Map<String, Class> classMap = new HashMap<String, Class>();
            classMap.put("iordersegments", IorderSegment.class);
            classMap.put("iorderpassengers", IorderPassenger.class);
            jsonConfig.setClassMap(classMap);

            IorderIssue iorderIssue = (IorderIssue)JSONSerializer.toJava(requestJson,jsonConfig);
            iorderIssue.setCreateTime(new Date());
            
            iorderIssue.setOrderType("01");//出票订单
            String isAduting = iorderIssue.getIsAduting();
            if("1".equals(isAduting)){
                iorderIssue.setOrderStatus("000");//待审核
            }else if("0".equals(isAduting)){
                iorderIssue.setOrderStatus("001");//待支付
            }
            
            IorderPriceIssue iorderPriceIssue = iorderIssue.getIorderPriceIssue();
            

        
            String orderId = iorderIssueManager.saveIorderIssue(iorderIssue, iorderPriceIssue,user);
            
            if(MyString.isNoEmpty(orderId)){//如果返回id,保存行程单信息
                IorderJourneyInfo iorderJourneyInfo = iorderIssue.getIorderJourneyInfo();
                iorderJourneyInfo.setBusinessId(orderId);
                this.universalManager.save(iorderJourneyInfo);
            }

            
            MyJSONTools.responseWriteData(response, "OKφ"+orderId);
        }catch(Exception e){
            e.printStackTrace();
            MyJSONTools.responseWriteData(response, "error:"+e.getMessage());
        }
        return null;
    }


2.

jsonWorkflowBean是json字符串

// 转换成Json对象
            JSONObject jsonObj = JSONObject.fromObject(jsonWorkflowBean);/*
             * 在JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map<String, Class> classMap
             * = new HashMap<String,
             * Class>();在classMap中put你要转换的类中的集合名,像:classMap.put("teachers",
             * Teacher.class);然后在toBean()的时候把参数加上, 像:Student student=(Student)
             * JSONObject.toBean(str, Student.class, classMap);
             */
            Map<String, Class> classMap = new HashMap<String, Class>();
            classMap.put("inputDataList", InputDataBean.class);
            classMap.put("imageList", ImageBean.class);
            //将json转换成workflowBean
            WorkflowBean workflow = (WorkflowBean) JSONObject.toBean(jsonObj,
                    WorkflowBean.class, classMap);

jsonarray转list:

        JSONObject requestJson = JSONObject.fromObject(requestStr);
        
        String reqPassengers = requestJson.getString("reqPassengers");
        
        Map<String, Class> classMap = new HashMap<String, Class>();
        classMap.put("reqPassengers", ReqPassenger.class);
        
        JSONArray jsonArray = JSONArray.fromObject(reqPassengers);
        
        List<ReqPassenger> list = (List<ReqPassenger>)JSONArray.toCollection(jsonArray);
        
       
原文地址:https://www.cnblogs.com/jinzhiming/p/4732046.html