JSONObject 与 JSON 互转

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014799292/article/details/80692897
使用目的

目前数据交互大多以 JSON 字符串为信息传输,主要格式有

{"age":"22","name":"李四"}

[{"age":"21","name":"张三"}]

最常见的应用场景是前后端对接,第三方平台文档对接,下面展示转换使用。

一、引入 jar , 此处引入 com.alibaba.fastjson 版本的jar包

    
    
  1.         <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version> 1.1.31</version>
  5. </dependency>
二、建立测试类对象

    
    
  1. class Student {
  2. private String name;
  3. private String age;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public String getAge() {
  11. return age;
  12. }
  13. public void setAge(String age) {
  14. this.age = age;
  15. }
  16. }
三、转换
1、对象 转 JSON

    
    
  1.         Student stu1 = new Student();
  2. stu1.setName( "张三");
  3. stu1.setAge( "21");
  4. String stu1Json = JSONObject.toJSONString(stu1);

输出:

{"age":"21","name":"张三"}
    
    
2、JSON 转 对象

    
    
  1.         Student stu1to = JSON.parseObject(stu1Json, Student.class);
  2. System.out.println( "json 转对象:");
  3. System.out.println(stu1to);
  4. System.out.println(stu1to.getName());
  5. System.out.println(stu1to.getAge());

输出:


    
    
  1. json 转对象:
  2. Student@ 2aae9190
  3. 张三
  4. 21

注:JSON键名要与对象属性名相对应

3、对象数组 转 JSON

    
    
  1.         Student stu2 = new Student();
  2. stu2.setName( "李四");
  3. stu2.setAge( "22");
  4. List<Student> list = new ArrayList<Student>();
  5. list.add(stu1);
  6. list.add(stu2);
  7. String listJson = JSONObject.toJSONString(list);
  8. System.out.println(listJson);

输出:

[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]
    
    
4、JSON 转 对象数组

    
    
  1.         List<Student> studentList = JSON.parseArray(listJson, Student.class);
  2. for (Student student : studentList) {
  3. System.out.println(student.getName());
  4. }

输出:


    
    
  1. json 数组格式转换对象
  2. 张三
  3. 李四
5、JSON多级组合,适用于请求文档传输参数

    
    
  1.         JSONObject jsona = new JSONObject();
  2. jsona.put( "number", "1");
  3. JSONObject jsonb = new JSONObject();
  4. jsonb.put( "listMap", list);
  5. JSONObject jsonAll = new JSONObject();
  6. jsonAll.put( "jsona", jsona);
  7. jsonAll.put( "jsonb", jsonb);
  8. String jsonAllStr =JSONObject.toJSONString(jsonAll);
  9. System.out.println(jsonAllStr);

输出:

{"jsona":{"number":"1"},"jsonb":{"listMap":[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]}}
    
    
6、多级 JSON 组合

6.1、只获取指定字段,接上方示例代码


    
    
  1. String getJsona = JSON.parseObject(jsonAllStr).getString( "jsona");
  2. String strjsona = JSON.parseObject(getJsona, String.class); //指定获取 字段名对象信息,如果为单个String可不指定,这里作为实例写出
  3. System.out.println( "只拿jsona信息");
  4. System.out.println(strjsona);

输出:


    
    
  1. 只拿jsona信息
  2. { "number": "1"}

6.2、获取指定字段对象


    
    
  1.     String getJsonb = JSON.parseObject(jsonAllStr).getString( "jsonb");
  2. String getJsonbb = JSON.parseObject(getJsonb).getString( "listMap");     //这里被二级包裹,所以要获取2次才能转换对象数组
  3. List<Student> strjsonb = JSON.parseArray(getJsonbb, Student.class);
  4. System.out.println( "只拿jsonbb信息");
  5. System.out.println(strjsonb);

输出:


    
    
  1. 只拿jsonbb信息
  2. [Student@ 3d04a311, Student@ 7a46a697]


				<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>
				</article>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值