开发者社区> zhuyuansj> 正文

json字符串还原map

简介: 今天有个需求,由于调用第三方接口一直调不通,但是又需要先把接口写好供前端调用,于是想到以前写的一个json字符串还原的类。这里做个笔记。 package com.
+关注继续查看

今天有个需求,由于调用第三方接口一直调不通,但是又需要先把接口写好供前端调用,于是想到以前写的一个json字符串还原的类。这里做个笔记。

package com.hz.token;

import com.google.gson.Gson;

import java.util.List;
import java.util.Map;

/**
 * 2017/6/26.
 */
public class JsonToStringUtil {
    private static StringBuffer sb = new StringBuffer("Map jsonMap = new HashMap();\n");

    private JsonToStringUtil() {

    }


    public static void main(String[] args) {
        String s = parseJsonStr(CONTENT);
        System.out.println(s);
    }


    public static String parseJsonStr(String jsonStr) {
        Gson gson = new Gson();
        Map<String, Object> map = gson.fromJson(jsonStr, Map.class);
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            Object value = entry.getValue();
            if (value instanceof String) {
                appendStringMap("jsonMap", entry.getKey(), (String) value);
            }
            if (value instanceof Number) {
                appendObjectMap("jsonMap", entry.getKey(), value);
            }
            if (value instanceof Map) {
                appendMapMap(entry.getKey(), (Map) value);
                appendObjectMap("jsonMap", entry.getKey(), entry.getKey());
            }
            if (value instanceof List) {
                appendListMap(entry.getKey(), (List) value);
                appendObjectMap("jsonMap", entry.getKey(), entry.getKey());
            }

        }
        return sb.toString();
    }

    private static void appendStringMap(String mapKey, String key, String value) {
        sb.append(mapKey).append(".put(\"").append(key).append("\",\"").append(value).append("\");\n");
    }

    private static void appendObjectMap(String mapKey, String key, Object value) {
        sb.append(mapKey).append(".put(\"").append(key).append("\",").append(value).append(");\n");
    }

    private static void appendMapMap(String subMapKey, Map<String, Object> subMapValue) {
        sb.append("Map ").append(subMapKey).append("= new HashMap();\n");
        for (Map.Entry<String, Object> entry : subMapValue.entrySet()) {
            Object value = entry.getValue();
            if (value instanceof String) {
                appendStringMap(subMapKey, entry.getKey(), (String) value);
            }
            if (value instanceof Number) {
                appendObjectMap(subMapKey, entry.getKey(), value);
            }
            if (value instanceof Map) {
                appendMapMap(entry.getKey(), (Map) value);
                appendObjectMap(subMapKey, entry.getKey(), entry.getKey());
            }
            if (value instanceof List) {
                appendListMap(entry.getKey(), (List) value);
                appendObjectMap(subMapKey, entry.getKey(), entry.getKey());
            }
        }
    }

    private static void appendStringList(String listKey, Object value) {
        sb.append(listKey).append(".add(\"").append(value).append("\");\n");
    }

    private static void appendObjectList(String listKey, Object value) {
        sb.append(listKey).append(".add(").append(value).append(");\n");
    }

    private static void appendListMap(String subListKey, List subListValue) {
        sb.append("List ").append(subListKey).append("= new ArrayList();\n");
        int i = 1;
        for (Object value : subListValue) {
            if (value instanceof String) {
                appendStringList(subListKey, value);
            }
            if (value instanceof Number) {
                appendObjectList(subListKey, value);
            }
            if (value instanceof Map) {
                String mapName = subListKey + "SubMap" + i;
                appendMapMap(mapName, (Map) value);
                appendObjectList(subListKey, mapName);
            }
            if (value instanceof List) {
                String listName = subListKey + "SubList" + i;
                appendListMap(listName, (List) value);
                appendObjectList(subListKey, listName);
            }
            i++;
        }
    }

    private static String CONTENT = "{\"authCode\":\"drivingLicense\",\"childCommitType\":\"drivingLicenseInfos\",\"custNo\":\"955628\",\"loanCode\":\"carat\",\"mainAuthlog\":\"2016-07-01\",\"mainCardno\":\"沪A12345\",\"mainMotorno\":\"HJ145632\",\"mainRegistdate\":\"2016-07-01\",\"ssAccountId\":\"\"}\n";
}
image.png

关注我的公众号,都是满满的干货!

孙坚.gif

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
7613 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
17592 0
fastjson解析json字符串,key缺少双引号导致下游服务无法解析
背景说明 在使用fastjson 1.2.60版本将对象转化为json字符串时,为处理Map值为null的情况,采用了WRITE_MAP_NULL_FEATURES属性,但该属性解析出来的key中缺少双引号,在key包含特殊字符时,如“-”和“:",下游服务在进行反序列化时出现无法解析的错误,从而出现问题。
3407 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
23604 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
18105 0
json字符串还原map
今天有个需求,由于调用第三方接口一直调不通,但是又需要先把接口写好供前端调用,于是想到以前写的一个json字符串还原的类。这里做个笔记。 package com.
1044 0
+关注
zhuyuansj
后端你别闹,热爱编程,热爱运营,热爱自媒体,性别男,爱好女.兴趣爱好广泛,旅游,唱歌,噶赛无.欢迎随时撩我.
76
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载