JSON数据的转换(1)

199 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

实习期间最开始大部分时间都是在帮助组里面做测试(因为人手比较紧张),最近终于接到了一个小需求,现在已经基本上解决了,记录一下在做的过程中学到的内容。

需求大致是:我是Java开发,我需要写后台接口调用C++那边的函数,然后C++那边会给我返回JSON数据,我对JSON数据进行处理最后展示在页面中。现在看来,还是比较简单的,但最开始可能是对JSON数据比较陌生,在做的时候真的是................

最最开始的时候,我调C++函数时是没有请求参数的,直接调就会给我返回,返回的JSON格式是

{
    model1: [
        monitor1,
        monitor2,
        ....
    ],
    model2: [
        monitor3,
        monitor4,
        monitor5,
        ....
    ],
    ....
}

然后我看到这样的数据的时候,感觉上还是比较好处理的,因为调C++函数的插件现成的,我要做的只是发请求调,拿到返回的 JSON 换个格式处理一下返回给前端。拿到C++返回的数据之后,也就是上面这些,我直接尝试将它转为 Map,因为 Map 就是 key-value,跟上面这种 模块-监控 比较相似。

然后我就去转了,但我不知道怎么转,搜了一会儿后,了解到 JSON 支持接收后类型的转换,直接使用 JSONObject.paseObject(response, Map.class) 进行转换。转换成 map 后,思路就比较清晰了。Map 中的 key 就是每个 model,而 Map 中的 value 要是一个集合,因为每个 model 对应多个 monitor。所以我选用 List 来作为 value 的类型来接收 monitor。当时没有太在意 map 的选择,直接选用了 HshMap。

最后我去看结果时,发现 model 下的 monitor 确实全部都接到了,但顺序是乱的。很奇怪,我一开始以为是我在遍历 map 的时候出问题了,但想一想感觉不对啊,遍历只是将 map 中的数据读出来而已。最后打断点后,发现在向 map 中存数据的时候,数据就已经乱了,突然意识到我的 Map 选错了,哇,考虑不周。将 HashMap 改为 LinkedHashMap 后,再试就没有问题了。

现在看来,最开始这个需求是真的挺简单的,但是我在刚刚拿到的时候,确实是比较紧张的,生怕自己做不出来,做不好,硬生生拖了两三天才把接口改出来,然后还要写页面,就当我准备全身心投入前端时..............需求改了,返回的参数类型变了,.................哈哈...............哈哈.................真好.................