JSONObject 的使用
1. 导入依赖
这里以 20180813 的 json 版本为例
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>
2. 构建 json
2.1 直接构建
JSONObject obj = new JSONObject();
obj.put(key, value);
直接构建即直接实例化一个 JSONObject 对象,而后调用其 put() 方法,将数据写入。put() 方法的第一个参数为 key 值,必须为 String 类型,第二个参数为 value,可以为 boolean、double、int、long、Object、Map 以及 Collection 等。当然,double 以及 int 等类型只是在 Java 中,写入到 json 中时,统一都会以 Number 类型存储。
2.2 使用HashMap构建
使用 HashMap 构建 json,实际上即先创建好一个 HashMap 对象并且将数据打包进去,而后在创建 JSONObject 时将其作为一个参数传进去。
Map<String, Object> data = new HashMap<String, Object>();
data.put("name", "John");
data.put("sex", "male");
data.put("age", 22);
data.put("is_student", true);
data.put("hobbies", new String[] {"hiking", "swimming"});
JSONObject obj = new JSONObject(data);
// 或是下面这种写法,将 java 对象转换为 json 对象
JSONObject obj = JSONObject.fromObject(data);
2.3 使用JavaBean构建
相较于前两种方法,实际开发中应用 JavaBean 构建 json 的情况更为常见,因为这样代码的重用率更高。
- 创建 javaBean
 
@Data
public class PersonInfo {
    private String name;
    private String sex;
    private int age;
    private boolean isStudent;
    private String[] hobbies;
- 构建 json
 
PersonInfo info = new PersonInfo();
info.setName("John");
info.setSex("male");
info.setAge(22);
info.setStudent(true);
info.setHobbies(new String[] {"hiking", "swimming"});
JSONObject obj = new JSONObject(info);
// 或是下面这种写法,将 java 对象转换为 json 对象
JSONObject obj = JSONObject.fromObject(data);
注意:JavaBean一定要有 getter 方法,否则会无法访问存储的数据。
3. 解析 json
解析 json 主要是基本类型如 Number、boolean 等,与数组 Array。
基本类型的解析直接调用 JSONObject 对象的 getXxx(key) 方法,如果获取字符串则 getString(key),布尔值则 getBoolean(key),以此类推。
数组的解析稍微麻烦一点,需要通过 JSONObject 对象的 getJSONArray(key) 方法获取到一个 JSONArray 对象,再调用 JSONArray 对象的 get(i) 方法获取数组元素,i 为索引值
3.1 只包含一个对象的 json 字符串解析
//将得到json数据转换为一个json对象
JSONObject jsonObject = new JSONObject(data);
//获取"persons"的json对象
jsonObject = jsonObject.getJSONObject("persons");
//通过相应的get方法,获取相应的属性
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
//将获取到的数据放到一个Person对象中
Person person = new Person(id, name, age);
3.2 含有多个对象的 json 字符串
List<Person> list = new ArrayList<>();
//将得到json数据转换为一个json对象
JSONObject jsonObject = new JSONObject(data);
//获取"persons"的json对象,并将其转换为一个json数组
JSONArray array = jsonObject.getJSONArray("persons");
//通过循环获取数据,并放入list集合中
for (int i = 0;i<array.length();i++){
    int id = array.getJSONObject(i).getInt("id");
    String name = array.getJSONObject(i).getString("name");
    int age = array.getJSONObject(i).getInt("age");
    Person person = new Person(id, name, age);
    list.add(person);
}
return list;
4. 参考
https://www.cnblogs.com/joahyau/p/6736637.html
完。
JSONObject 的使用的更多相关文章
- 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法
		
在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常. 意思是出现了死循环,也就是Model之间有循环包含关系: ...
 - Gson将字符串转换成JsonObject和JsonArray
		
以下均利用Gson来处理: 1.将bean转换成Json字符串: public static String beanToJSONString(Object bean) { return new Gso ...
 - JSONObject、JSONArray区别
		
json,就是一个键对应一个值,超级简单的一对一关系.现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个数据还那么麻烦.其实,就跟if else语句一样,如果if ...
 - android JSON获取值String无法转换成JSONObject
		
项目中,已经获取到服务器返回的XML,并且已经解析. value= (String) result.getProperty("Value").toString().trim();J ...
 - JSONObject.fromObject(map)(JSON与JAVA数据的转换)
		
JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...
 - JSONObject put,accumulate,element的区别
		
public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的valu ...
 - Json_异常_net.sf.json.JSONException: JSONObject["solution"] not found.
		
net.sf.json.JSONException: JSONObject["solution"] not found. 没有这个元素造成的. 问题代码: JSONObject j ...
 - JSONObject,JSONArray,Map,String之间转换
		
http://blog.csdn.net/superit401/article/details/51727739 1.String转JSONObject String jsonMessage = &q ...
 - JSONObject
		
JAR包简介: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.j ...
 - java JSONObject/JSONArray详解
		
应用架包:json-lib-2.4-jdk15.jar.及相关依赖架包. 一.JSONObject和JSONArray对象 -------------------------------------- ...
 
随机推荐
- 3.rabbitmq--发布订阅模式
			
rabbitmq-----发布订阅模式 模型组成 一个消费者Producer,一个交换机Exchange,多个消息队列Queue,多个消费者Consumer 一个生产者,多个消费者,每一个消费者都有 ...
 - 4.Java JSON使用
			
Java 中 JSON 的使用 分类 编程技术 本章节我们将为大家介绍如何在 Java 语言中使用 JSON. 类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面 ...
 - dts是如何来描述iommu与PCI(e)之间的关系?
			
1. 在一颗树的根下每个PCI(e)设备被它的请求id(AKA RID)独一无二的标识,一个请求ID由三部分组成,总线号,设备号和功能号,如: Bits [15:8] 是总线号 Bits [7:3]是 ...
 - springBoot2.X---过滤器,监听器,拦截器
			
过滤器,监听器,拦截器 一.画图理解 过滤器(filter),监听器(listener),拦截器(Interceptor). 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入 ...
 - List自定义对象的排序,根据对象的某一列进行排序
			
在工作中,经常需要对List对象集合进行排序操作,下面总结下搞个通用排序对象,原理是使用JAVA的 Comparator 接口实现排序 不多说直接上“干货” 1.存在实体类: @Data @ ...
 - java代码实现简体繁体转换
			
汉字分为简体和繁体字,这是众所周知的,虽然繁体字中国大陆这边用的并不会太多,但时不时的还是会使用到.那么,如何做到简体字和繁体字的转换呢?其实很简单,这里附上一个java版本的简繁体转换,用网上找的接 ...
 - springmvc xml文件配置中使用系统环境变量
			
来源:how to read System environment variable in Spring applicationContext 答案: In order to access syste ...
 - 同步pod容器内时区
			
同步pod容器内时区 .直接修改镜像的时间设置,好处是应用部署时无需做特殊设置,但是需要手动构建Docker镜像. .部署应用时,单独读取主机的“/etc/localtime”文件,即创建pod时同步 ...
 - java内存模型的原子性、可见性、有序性与指令重排序
			
在并发编程中,我们通常会遇到以下三个概念:原子性.可见性和有序性.我们先看具体看一下这三个概念: 1.原子性 操作时不可分割的比如a=0,此操作不可分割,而++a,实际上是a=a+1,为两个操作.想将 ...
 - 【Linux】配置SSH免密登录
			
环境说明 假设我们有三台机器分别为bigdata111,bigdata112,bigdata113,三台机器均为centos 7系统. 配置SSH免密登录 (1)利用Xshell的发送键输入到所有会话 ...