Android json字符串转Map

Android json字符串转Map今天,同事问我json的问题。遍历json数组,解决完以后。我想到了json转Map这个问题。写一下,发现效果还行那个发上来看看吧。如果想省事的话,用阿里的FastJson我感觉也是不错的,网上教程很多,我就不多说了。注意这是Android自带的json包importorg.json.JSONArray;importorg.json.JSONException;importo…

大家好,又见面了,我是你们的朋友全栈君。

今天,同事问我json的问题。遍历json数组,解决完以后。我想到了 json转Map这个问题。写一下,发现效果还行 那个发上来看看吧。
如果想省事的话,用阿里的FastJson 我感觉也是不错的,网上教程很多,我就不多说了。

注意这是Android自带的json包

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

在这里说一下,JSONObject是键值对应的,符合map键值对应, JSONArray 是没有key的。这里,要转成map的话,我是按照JSONArray里面的元素顺序,给他们key,key就是他们的位置

看代码:

   /** * @param content json字符串 * @return 如果转换失败返回null, */
    Map<String, Object> jsonToMap(String content) { 
   
        content = content.trim();
        Map<String, Object> result = new HashMap<>();
        try { 
   
            if (content.charAt(0) == '[') { 
   
                JSONArray jsonArray = new JSONArray(content);
                for (int i = 0; i < jsonArray.length(); i++) { 
   
                    Object value = jsonArray.get(i);
                    if (value instanceof JSONArray || value instanceof JSONObject) { 
   
                        result.put(i + "", jsonToMap(value.toString().trim()));
                    } else { 
   
                        result.put(i + "", jsonArray.getString(i));
                    }
                }
            } else if (content.charAt(0) == '{'){ 
   
                JSONObject jsonObject = new JSONObject(content);
                Iterator<String> iterator = jsonObject.keys();
                while (iterator.hasNext()) { 
   
                    String key = iterator.next();
                    Object value = jsonObject.get(key);
                    if (value instanceof JSONArray || value instanceof JSONObject) { 
   
                        result.put(key, jsonToMap(value.toString().trim()));
                    } else { 
   
                        result.put(key, value.toString().trim());
                    }
                }
            }else { 
   
                Log.e("异常", "json2Map: 字符串格式错误");
            }
        } catch (JSONException e) { 
   
            Log.e("异常", "json2Map: ", e);
            result = null;
        }
        return result;
    }

使用

   JSONObject jsonObject = new JSONObject();
        jsonObject.put("one", "哈哈哈");
        jsonObject.put("two", "yyy");
        JSONArray jsonArray = new JSONArray();
        jsonArray.put("数组内容1");
        jsonArray.put("数组内容2");
        jsonArray.put("数组内容3");
        JSONObject inner = new JSONObject();
        inner.put("内置", "我是内置的");
        inner.put("内置数组", new JSONArray().put(1));
        jsonArray.put(inner);
        jsonObject.put("three", jsonArray);

        Map<String, Object> map = jsonToMap(jsonObject.toString());
        //这里最好写一个循环输出map的方法 ,我这是偷懒的写法
        map.forEach((s, o) -> { 
   
            Zprint.log(this.getClass(), s, o);
        });

输出结果

在这里插入图片描述

完全符合要求。

是不是很好奇 我的控制台怎么是这种格式的,这是我自定义的log输出工具,可以看我以前的博客。Android 输出日志 带类名 方法名 参数 行号,点击直接到代码行

如果有不懂的,可以关注我的公众号 “知我饭否” 向我留言。我会每天更新一些文章,有兴趣的可以 微信 搜索”知我饭否” or 扫描我的 博客头像

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151803.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql8.0.26安装及配置超详细教程(Burpsuite超详细安装教程)

    文章目录:官网下载MySQL的安装包添加并配置my.ini文件配置系统变量并初始化MySQL安装并启动MySQLNavicat连接MySQL并修其密码安装过程中常见问题及其解决方法官网下载MySQL的安装包下载链接如下:MySQL8.0.20版本其他版本:MySQL8.0.16版本MySQL8.0.20版本压缩包解压后如下图所示:添加并配置my.ini文件在原解压根…

    2022年4月11日
    193
  • C语言 爱心代码(颜色可改)

    C语言 爱心代码(颜色可改)代码 include stdio h include windows h include tchar h intmain system color2 这里修改颜色码 doublex y a for y 1 5 y gt 1 5 y 0 1214 for x 1 5 x lt 1 5 x 0 05 a x x y y 1 tchar h windows h stdio h

    2026年1月20日
    1
  • SQL三表连接查询

    SQL三表连接查询下面三个表分别是:table1表、table2表、table3表目标:查询A公司的所有30岁以下员工的名字。    employee_id   company_id           1          101           2          101           3           102   …

    2022年5月3日
    54
  • TranslateMessage DispatchMessage

    TranslateMessage DispatchMessageTranslateMessage函数函数功能描述:将虚拟键消息转换为字符消息。字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出。.函数原型:   BOOLTranslateMessage( CONSTMSG*lpMsg);.参数:   lpMsg        指向一个含有用GetMes

    2025年7月16日
    5
  • Quartus II 13.0sp1 (64-bit)使用教程「建议收藏」

    Quartus II 13.0sp1 (64-bit)使用教程「建议收藏」本人大三在学习计算机组成原理,要用到QuartusII13.0sp1(64-bit),但是下载安装完以后发现不会用,世界这么大,百度也没有任何收获,啊啊啊,昨天终于会用了,所以写了这个教程,希望对大家有用,详情见图片这里会弹出来一个框,然后(next)然后得到下面这个图这里也有一个(next)省略了,都是点一下哦然后(next)——》(finsh)module…

    2022年10月10日
    4
  • 数组求和的方法_vb怎么求和数组里的值

    数组求和的方法_vb怎么求和数组里的值对于数组求和有多种方法:1:递归方法functionsum(arr){ varlen=arr.length; if(len==0){  return0; }elseif(len==1){  returnarr[0]; }else{  returnarr[0]+sum(arr.slice(1)); }}vara=newArray(1…

    2022年10月3日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号