FastJson将Json字符串转Map,利用递归算法取值

场景:使用jackson解析接口返回的json字符串时,json字符串格式不统一;

接口返回成功json格式,用jackson解析通过:

{"public_response":{"msg":"success","result":{"order_state":true},"error":1}}

接口返回错误json格式,用jackson解析抛异常:

{"public_response":{"msg":"business activity num control error","result":"","error":-1411}}

result正确时返回对象,错误时返回空串。导致在catch块中写业务逻辑。于是想到fastjson。

代码:JsonUtil.java

public class JsonUtil {
	private HashMap<String, Object> resultMap = new HashMap<String, Object>();

	public static void main(String[] args) {
		String returnStr = "{\"public_response\":{\"msg\":\"business activity num control error\",\"result\":\"\",\"error\":-1411}}";
		returnStr = "{\"public_response\":{\"msg\":\"success\",\"result\":{\"order_state\":true},\"error\":1}}";
		System.out.println(returnStr);
		returnStr = "{\"sign\":\"d6fe0c73cf1ca0ad1e3f13f454835cdc325c4ade6b1929998f4b7932f6ffd950\",\"public_response\":{\"error\":-101,\"msg\":\"签名错误\"}}";
		Map<String, Object> s = (Map<String, Object>) JSON.parse(returnStr);
		HashMap<String, Object> resultMap = new JsonUtil().parseJsonToMap(s);
		System.out.println(resultMap);

	}

	// 递归
	public HashMap<String, Object> parseJsonToMap(Map<String, Object> params) {
		for (Map.Entry<String, Object> entry : params.entrySet()) {
			Object valueObj = entry.getValue();
			if (valueObj instanceof Map) {
				parseJsonToMap((Map<String, Object>) valueObj);
			} else {
				resultMap.put(entry.getKey(), valueObj);
			}
		}
		return resultMap;
	}
}

问题解决,避免了在catch块中写业务逻辑。 

如果只想获得状态码error或msg,代码如下:

String returnStr = "{\"public_response\":{\"msg\":\"business activity num control error\",\"result\":\"\",\"error\":-1411}}";
//returnStr = "{\"public_response\":{\"msg\":\"success\",\"result\":{\"order_state\":true},\"error\":1}}";
JSONObject jsonObject = JSONObject.parseObject(returnStr);
JSONObject newJsonObj  = JSONObject.parseObject(jsonObject.getString("public_response"));
System.out.println(newJsonObj.getString("error"));
System.out.println(newJsonObj.getString("msg"));

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值