常规Json解析

本文介绍了如何利用Google的TypeToken类库解析Json响应。首先,通过httpClientutils发送POST请求获取响应字符串,然后使用jsonUtils的parseObject方法,结合TypeToken来解析成特定类型的对象。

一、 直接解析

AlarmRequest serverRequest = new AlarmRequest(); //封装要传递的bean


Map<String, Object> params = cn.hutool.core.bean.BeanUtil.beanToMap(serverRequest); 
String responseString = HttpClientUtils.sendPost(apis.mobileLink(labelResources.getQueryUserLabelList()), JSONUtil.toJsonStr(params));
if (!StringUtils.isEmpty(responseString)) {
    MobileApiResponse serverResp = cn.hutool.json.JSONUtil.toBean(responseString, MobileApiResponse.class);
    if (serverResp != null && CoreConstant.SUCCEED_CODE_RES.equals(serverResp.getCode())) {
        cn.hutool.json.JSONArray strArray = (JSONArray) serverResp.getData();
        List<UserLabelResponseVo> labels = JSONUtil.toList(strArray, UserLabelResponseVo.class); //JSONArray转为List集合
        return Results.success(labels);
    }
}

响应的参数:

@Data
public class MobileApiResponse<T> {
    private String info;

    private Integer code;

    private Integer count;

    private T data;
}

 

二、TypeToken 是google提供解析json数据的类库中的一个类:

Type type = new TypeToken<linkedList<T>>(){}.getType();

String responseString = httpClientutils.sendFormPost(url,parms);

resp = jsonUtils.parseObject(responseString, type);

Map<String, Object> params = BeanUtil.beanToMap(serverRequest);
String responseString = HttpClientUtils.sendPost(apis.blackLink(alarmResources.getQueryBlackList()), JSONUtil.toJsonStr(params));
if (!StringUtils.isEmpty(responseString)) {
    Type type = new TypeToken<ServerResponse>() {
    }.getType();
    ServerResponse serverResp = JSONUtil.toBean(responseString, type, false);
    if (serverResp != null) {
        if (serverResp.getStatus() == CoreConstant.SUCCEED_CODE) {
            JSONObject jsonObject = (JSONObject)serverResp.getContent();
            JSONArray strArray = jsonObject.getJSONArray("list");
            List<BlackVo> blackVos = JSONUtil.toList(strArray, BlackVo.class);
            return Results.success(blackVos);
        }
    }
}
### 如何在 Lua 中解析 JSON 数据 #### 使用 `lua-cjson` 库解析 JSON 数据 为了使用 `lua-cjson` 进行 JSON 解析,需要先将此库添加至 Lua 项目的依赖列表并利用 Lua 的 `require` 函数来加载该模块。下面是一段简单的代码示例展示了解码 JSON 字符串的过程[^1]。 ```lua local cjson = require "cjson" local json_str = '{"name":"John","age":30,"city":"New York"}' local data = cjson.decode(json_str) print(data.name) -- 输出: John ``` #### 利用 `Lunajson` 处理解析需求 对于那些寻求更简单 API 设计以及更高灵活性的应用来说,可以选择 Lunajson。这个库同样提供了基本的解码功能,即把 JSON 文本转换成 Lua 表达式的形式存储起来供后续操作使用;同时也具备编码能力,可逆向完成上述过程。除此之外,还特别设计了一套基于 SAX 风格的数据流处理机制,允许用户注册回调函数来自定义响应逻辑,在面对大规模数据集时尤为有用[^2]。 ```lua local lunajson = require 'lunajson' -- 将 JSON 字符串转为 Lua table local obj = lunajson.decode('{"key": "value", "array": [1, 2, 3]}') for k,v in pairs(obj) do print(k .. ": ", v) end ``` #### 探索 `LuaJSON` 工具包特性 当提到 Lua 平台上的 JSON 操作工具时不得不提 Thomas Harning Jr. 所开发维护的一个小巧而高效的解决方案——LuaJSON。除了常规的功能外,它还有着良好的社区支持和服务体系作为保障,方便使用者提交反馈意见或者求助于他人经验解决问题。其核心优势在于能够快速准确地实现两者之间的相互转化工作,并且保持较高的兼容性和稳定性[^3][^4]. ```lua local json = require("json") -- 把字符串形式的 JSON 转换成 Lua 对象 local decoded_data = json.parse([[ {"hello": "world"} ]]) if not decoded_data then error("Invalid input") end print(decoded_data.hello) -- 或者采用另一种方式调用 parse 方法 decoded_data = json.parse[[ { "number": 42 } ]] print(decoded_data.number) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值