【Project】JS的Map对象前后交互问题

这是我在项目中写的一个Map对象:

let map = new Map();

for (let i = 0; i < type_checked_value.length; i++) {
    let type_id = type_checked_value[i]
    map.set('type_' + type_id + '_quantity', $("#type_" + type_id + "_quantity").val());
    map.set('type_' + type_id + '_score', $("#type_" + type_id + "_score").val());
}

我天真的觉得JS自带的JSON对象就可以像Java的那些JSON转换组件一样调用即可实现转换【大雾】

let jsonMap = JSON.stringify(map);

用这个方法给后端之后就是一个空括号了,在java这里接受就是这个结果:

{}

然后找到了这个办法,可以实现JS的Map对象转换JSON

// JS map对象转换Json方法 https://blog.csdn.net/Jac__Xu/java/article/details/80969219
        function mapToJson(m) {
            var str = '{';
            var i = 1;
            m.forEach(function (item, key, mapObj) {
                if(mapObj.size == i){
                    str += '"'+ key+'":"'+ item + '"';
                }else{
                    str += '"'+ key+'":"'+ item + '",';
                }
                i++;
            });
            str +='}';
            //console.log(str);
            return str;
        }

传到了后台之后就是这个效果了:

{"type_2_quantity":"2","type_3_score":"5","type_1_score":"4","type_1_quantity":"2","type_3_quantity":"3","type_2_score":"5"}

在Java这里就使用了FastJson来处理转换的:

    @Test
    public void parseJavaScriptMapObject(){
        String json = "{\"type_2_quantity\":\"2\",\"type_3_score\":\"5\",\"type_1_score\":\"4\",\"type_1_quantity\":\"2\",\"type_3_quantity\":\"3\",\"type_2_score\":\"5\"}";
        // JSON.parseObject(json);
        Map map = JSON.parseObject(json);

        System.out.println(map);

        Object type_2_quantity = map.get("type_2_quantity");
        System.out.println(type_2_quantity);
    }

测试的结果是能取到值的

{"type_2_quantity":"2","type_3_score":"5","type_1_score":"4","type_1_quantity":"2","type_3_quantity":"3","type_2_score":"5"}
2

Process finished with exit code 0

大概就这样了,没有别的补充

 

posted @ 2020-07-09 23:40  emdzz  阅读(254)  评论(0编辑  收藏  举报