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 扫描我的 博客头像

在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • springmvc过滤器和拦截器的区别_拦截器和过滤器的区别面试

    springmvc过滤器和拦截器的区别_拦截器和过滤器的区别面试SpringMVC中的过滤器和拦截器文章目录SpringMVC中的过滤器和拦截器一、过滤器二、拦截器三、小结一、过滤器​ 过滤器Filter是通过实现java.servlet.filter接口实现过滤器功能,作用是用于对传入的request和响应的response进行一些处理,比如对请求参数进行校验,或者设置、检验头部信息,再或者对一些非法行为进行校验。由实现的接口可知,过滤器是依赖于servlet容器。所以由于过滤器不依赖于spring容器,它也就无法获取到容器中的对象。创建一个过滤器类继承j

  • MySQL常用命令大全(完整)「建议收藏」

    MySQL常用命令大全(完整)「建议收藏」打开Linux或MacOS的Terminal(终端)直接在终端中输入windows快捷键win+R,输入cmd,直接在cmd上输入1、mysql服务的启动和停止netstopmysqlnetstartmysql启动失败可按快捷键win+R,输入services.msc,找到MySQL服务器的名称启动2、登陆mysqlmysql(…

  • 磁盘阵列的组建及维护技巧(图)

    磁盘阵列的组建及维护技巧(图)

  • qt tcpsocket 接收数据_如何给微信好友发送指定位置

    qt tcpsocket 接收数据_如何给微信好友发送指定位置在网络应用中,有时候我们会遇到这样的问题,用TCP不断的接收和发送不同类型的数据,数据大小,格式都不相同,起初看了qt的例子,按照例子写的程序效果相当的不好,尤其是在连续发送大数据的时候,接收端根本无法判断数据是否完整了,也不知道什么时候取读取,经过各种折腾加上看qt源码,总结出了这个方法,发送的时候,要先发送这个数据序列化后的大小,然后发送这个数据本身,接收端,首先收到了要接收数据的大小,心里有

  • CPU监控_安卓cpu实时监控

    CPU监控_安卓cpu实时监控一,关键概念1,ContextSwitches(上下文切换)2,TherunQueue(运行队列)3,CPU的使用率二,CPU监控2.1,健康状态下CPU基准线2.2,vmstat使用2.2.1

  • 天猫送给这些商家“首页置顶”丨 24张PPT详解天猫消费电子2018年商家策略

    天猫送给这些商家“首页置顶”丨 24张PPT详解天猫消费电子2018年商家策略

发表回复

您的电子邮箱地址不会被公开。

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