net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx 关于JSON对象解析List<XXX>在调用时出错问题

本文介绍如何将JSON字符串转换为Java对象,特别是处理包含泛型List的复杂对象。通过使用额外的Class Map来指定List中元素的具体类型,避免了解析过程中出现的对象类型不匹配问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,先看一下我们要转换的JSON对象:

ResultModel对象内有一个Word的List集合

package testOCR.model;

import java.util.ArrayList;
import java.util.List;

public class ResultModel {
	private String log_id;//登录id
	private String words_result_num;//识别结果数,表示words_result的元素个数 应该是行数
	private List<Word> words_result=new ArrayList<Word>();//结果列表
	public String getLog_id() {
		return log_id;
	}
	public void setLog_id(String log_id) {
		this.log_id = log_id;
	}
	public String getWords_result_num() {
		return words_result_num;
	}
	public void setWords_result_num(String words_result_num) {
		this.words_result_num = words_result_num;
	}
	public List<Word> getWords_result() {
		return words_result;
	}
	public void setWords_result(List<Word> words_result) {
		this.words_result = words_result;
	}
	@Override
	public String toString() {
		return "ResultModel [log_id=" + log_id + ", words_result_num="
				+ words_result_num + ", words_result=" + words_result + "]";
	}
	
}

Word实体类

package testOCR.model;

public class Word {
	String words;

	public String getWords() {
		return words;
	}

	public void setWords(String words) {
		this.words = words;
	}

	@Override
	public String toString() {
		return "Word [words=" + words + "]";
	}
	
	
}


之后我们把一个String类型的JSON字符串转换成ResultModel对象

 	 Map classMap = new HashMap();         
	 classMap.put("words_result",Word.class);
         JSONObject jsonobject = JSONObject.fromObject(jsonResult);
         ResultModel model=(ResultModel)JSONObject.toBean(jsonobject,ResultModel.class,classMap);

这里我已经解决了问题,普通的解析是这样的:

         JSONObject jsonobject = JSONObject.fromObject(jsonResult);
         ResultModel model=(ResultModel)JSONObject.toBean(jsonobject,ResultModel.class);

问题就出来了最后一个map,这个MAP说明了List中的格式,否则JSONObject.toBean就会把内部对象解析成net.sf.ezmorph.bean.MorphDynaBean类型,之后你再调用的时候就会出问题了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值