热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Androidjson字符串转Map

Androidjson字符串转Map,Go语言社区,Golang程序员人脉社



今天,同事问我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 扫描我的 博客头像


在这里插入图片描述





推荐阅读
  • 深入浅出:Java面向对象编程
    本文详细介绍了Java语言的核心特性——面向对象编程。探讨了Java的基本概念、平台无关性、丰富的内置类库及安全性,同时深入解析了类加载器、垃圾回收机制以及基本数据类型和其包装类。 ... [详细]
  • 快速排序是基于分治策略的一种排序算法,其平均时间复杂度为O(n log n),在大多数情况下表现优于其他排序算法。本文将详细介绍快速排序的工作原理,并提供一个Java语言的具体实现。 ... [详细]
  • 本文详细介绍了Android平台上的动态加载技术,包括其定义、分类及具体实现步骤。通过动态加载技术,开发者可以在不更新应用的情况下,向用户推送新的功能或修复bug,从而提升用户体验。 ... [详细]
  • [转] JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
    ECMAScript将对象的属性分为两种:数据属性和访问器属性。每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过for-in循环 ... [详细]
  • 本文探讨了如何在Django中创建一个能够根据需求选择不同模板的包含标签。通过自定义逻辑,开发者可以在多个模板选项中灵活切换,以适应不同的显示需求。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • 设计模式笔记12:迭代器模式(Iterator Pattern) ... [详细]
  • 本文介绍了如何从给定的JSON响应中正确地提取产品标题等信息。 ... [详细]
  • 十大排序算法JavaScript实现总结
    十大排序算法JavaScript实现总结,Go语言社区,Golang程序员人脉社 ... [详细]
  • java学习日记对JFrame的操作
    设置背景图片、添加音乐、监控键盘、改变字体风格等等!importjava.applet.Applet;importjava.applet.AudioClip;importjava. ... [详细]
  • 本文介绍了在处理财务凭证查询时,如何实现从插入或修改页面返回至原始查询结果页面,并确保数据保持最新状态的方法。通过使用JavaScript和Java的Session管理技术,解决了动态页面中AJAX调用失效的问题。 ... [详细]
  • 本文探讨了在Android平台下编写和读取.JSON文件的方法,解决读取文件时遇到的字符间异常空格问题。 ... [详细]
  • 本文章介绍了如何将阿拉伯数字形式的金额转换为中国传统的大写形式,适用于财务报告和正式文件中的金额表示。 ... [详细]
  • 本文详细介绍了如何在Android游戏中实现360°平滑触屏摇杆,包括摇杆的基本设计原理和具体实现步骤。 ... [详细]
  • Java中String对象的多种创建与使用方法详解
    本文详细介绍了Java中创建String对象的几种常见方式,包括直接使用双引号、通过new关键字、以及不同创建方式组合使用时的特点和注意事项。同时,文章还探讨了这些创建方式对内存的影响,特别是它们如何影响常量池和堆空间。 ... [详细]
author-avatar
东张西望
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有