JSON是基于{“键”:“值”} 对的存在,当然我们也可以多层嵌套,对于刚刚学习JSON十分便捷而且很好用,很容理解。话不多说直接上代码:

public String queryPostInterface(String theNewInterface) throws Exception {
      JSONObject jsonObject = new JSONObject(theNewInterface);
      String postId = AESUtil.Decrypt(jsonObject.getString("post_id"), cKey);//帖子ID
      StringBuffer sb = new StringBuffer();
       int size = 0;//定义一个变量用来接收循环多少次(共多少条数据)
       if(theNewInterface!=null && !"".equals(theNewInterface)){
            if (postId != null && !"".equals(postId)) {
            //获取帖子信息 tieba(具体业务自己查询这里只是个例子)
            TyPostInfo postInfo = tyPostBarService.selpostInfoById(Long.valueOf(postId));
            //查询帖子回复信息(具体业务自己查询这里只是个例子)(<TyPostbarReply>泛型是个对象)
            List<TyPostbarReply> replies = tyPostBarService.selectHuiHuid(Long.valueOf(postId));
              if (replies != null) {
                 sb.append("{\"stateCode\": " + 1 + ","); //JSON串的开头信息
                 sb.append(" \"message\": \"成功\",");
                 sb.append("\"replayList\": [");//JSON结果集
                 for (TyPostbarReply reply : replies) { //循环结果集,进行拼接
                 //获取用户ID uuid
                 Long userId = iUserInfoService.getIdByUserUUID(reply.getReplyUserid().toString()); //select UO.updateUserId from USER_INFO  UO where id=?
                 UserInfoVo usesr = tyPostBarService.selectById_yb(userId);
               String photo = "";
               if (usesr.getUserPhoto() != null) {
                    photo = usesr.getUserPhoto().substring(0, usesr.getUserPhoto().lastIndexOf("."));
              } else {
                   photo = "";
              }
                  sb.append("{\"userPhoto\": \"" + photo.toString() + "\",");//用户照片
                  sb.append("\"userName\": \"" + usesr.getRealName().toString() + "\",");//用户姓名
                  sb.append("\"floor\": \"" + reply.getFloorNum().toString() + "\",");//楼层数
                  sb.append("\"barID\": \"" + postInfo.getPostBarId().toString() + "\",");//贴吧Id
                  sb.append("\"postID\": \"" + postInfo.getId().toString() + "\",");//帖子id
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 sb.append("\"createTime\": \"" + sdf.format(reply.getCreateTime()) + "\",");//创建时间
                 sb.append("\"content\": \"" + reply.getReplyContent().toString() + "\"");//评论内容
                 size = size + 1;//循环一次+1
               if (size < replies.size()) {//这里需要注意下。如果循环总条数小于查出来的总条数每次循环完毕一次都在   “ },”  加上“,” 否则不加 “ ,”
                   sb.append("},");
               } else {
                 sb.append("}");
               }
          }
         sb.append("]}");  //最后在拼接最外层(在循环外部)
     }
    } else {
   sb.append("{\"stateCode\":" + 0 + ",");
   sb.append("\"message\":\" 传入参数为空\"}");
  }
  }else{
  sb.append("{\"stateCode\":" + 0 + ",");
  sb.append("\"message\":\" 传入参数为空\"}");
  }

  return AESUtil.Encrypt(sb.toString(), cKey);
   }
}

最后就会拼接成JSON串,具体业务具体分析,这只是一个方发,一个思想,编程重在思想!!!

以上是最基本的拼接方式下面看下json用法:

1.String转JSONObject

(1)json-lib(即net.sf.json.JSONObject)

String jsonMessage = "{\"语文\":\"88\",\"数学\":\"78\",\"计算机\":\"99\"}";

JSONObject  myJson = JSONObject.fromObject(jsonMessage);

(2).用阿里巴巴的fastjson的jar包

String str = "{\"baid\":null,\"32d3:\":\"null\",433:\"0x32\",032:\"ju9fw\"}";

com.alibaba.fastjson.JSONObject jm = com.alibaba.fastjson.JSON.parseObject(str);

2.String转JSONArray

String jsonMessage = "[{'num':'成绩', '外语':88, '历史':65, '地理':99, 'object':{'aaa':'1111','bbb':'2222','cccc':'3333'}}," +

"{'num':'兴趣', '外语':28, '历史':45, '地理':19, 'object':{'aaa':'11a11','bbb':'2222','cccc':'3333'}}," +

"{'num':'爱好', '外语':48, '历史':62, '地理':39, 'object':{'aaa':'11c11','bbb':'2222','cccc':'3333'}}]";

JSONArray myJsonArray = JSONArray.fromObject(jsonMessage);

System.out.println(myJsonArray);

3.JSON可以有两种格式,一种是对象格式的,另一种是数组对象,

{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串

[{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式

在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。

Student stu=new Student();

stu.setName("JSON");

stu.setAge("23");

stu.setAddress("北京市西城区");

 //3.1、使用JSONObject

JSONObject json = JSONObject.fromObject(stu);

//3.2、使用JSONArray

JSONArray array=JSONArray.fromObject(stu);

String strJson=json.toString();

String strArray=array.toString();

System.out.println("strJson:"+strJson);

System.out.println("strArray:"+strArray);

结果:

strJson:{"address":"北京市西城区","age":"23","name":"JSON"}

strArray:[{"address":"北京市西城区","age":"23","name":"JSON"}]

4.JSON字符串java对象

//定义两种不同格式的字符串

String objectStr="{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城区\"}";

String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城区\"}]";

//4.1使用JSONObject

JSONObject jsonObject=JSONObject.fromObject(objectStr);

  Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);

//4.2使用JSONArray

JSONArray jsonArray=JSONArray.fromObject(arrayStr);

//获得jsonArray的第一个元素

Object o=jsonArray.get(0);

JSONObject jsonObject2=JSONObject.fromObject(o);

Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);

System.out.println("stu:"+stu);

System.out.println("stu2:"+stu2);

结果:   stu:Student [name=JSON, age=24, address=北京市西城区]

stu2:Student [name=JSON, age=24, address=北京市西城区]

从上面的代码中可以看出,使用JSONObject可以轻松的把JSON格式的字符串转化为java对象,但是使用JSONArray就没那么容易了,因为它有“[]”符号,所以我们这里在获得了JSONArray的对象之后,取其第一个元素即我们需要的一个student的变形,然后使用JSONObject轻松获得。

5.list和json字符串的互转

 list--json字符串

Student stu=new Student();

stu.setName("JSON");

stu.setAge("23");

stu.setAddress("北京市海淀区");

List<Student> lists=new ArrayList<Student>();

lists.add(stu);

  //5.1、使用JSONObject

//JSONObject listObject=JSONObject.fromObject(lists);

   //5.2、使用JSONArray

JSONArray listArray=JSONArray.fromObject(lists);

//System.out.println("listObject:"+listObject.toString());

        System.out.println("listArray:"+listArray.toString());

       我把使用JSONObject的方式给注掉了,我们先看注释之前的结果,

Exception in thread "main" net.sf.json.JSONException: 'object' is an array. Use JSONArray instead

告诉我说有一个异常,通过查看源码发现,在使用fromObject方法的时候会先进行参数类型的判断,这里就告诉我们,传入的参数是一个array类型,因为使用的ArrayList,再来看,注释之后的结果,

listArray:[{"address":"北京市海淀区","age":"23","name":"JSON"}]

json字符串--》》list

String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城区\"}]";

  //转化为list

  List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr), Student.class);

for (Student stu : list2) {

System.out.println(stu);

}

//转化为数组

                Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);

for (Student student : ss) {

System.out.println(student);

}

结果:Student [name=JSON, age=24, address=北京市西城区]

Student [name=JSON, age=24, address=北京市西城区]

6.map和json字符串的互转

    map--》》json字符串

Student stu=new Student();

stu.setName("JSON");

stu.setAge("23");

stu.setAddress("中国上海");

Map<String,Student> map=new HashMap<String,Student>();

map.put("first", stu);

  //6.1、JSONObject

 JSONObject mapObject=JSONObject.fromObject(map);

System.out.println("mapObject"+mapObject.toString());

        //6.2、JSONArray

  JSONArray mapArray=JSONArray.fromObject(map);

System.out.println("mapArray:"+mapArray.toString());

结果

mapObject{"first":{"address":"中国上海","age":"23","name":"JSON"}}

mapArray:[{"first":{"address":"中国上海","age":"23","name":"JSON"}}]

json字符串--》》map

String strObject="{\"first\":{\"address\":\"中国上海\",\"age\":\"23\",\"name\":\"JSON\"}}";

//JSONObject

  JSONObject jsonObject=JSONObject.fromObject(strObject);

Map map=new HashMap();

map.put("first", Student.class);
        //使用了toBean方法,需要三个参数
        MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map);

System.out.println(my.getFirst());

结果:

Student name=JSON, age=23, address=中国上海]

7.下面是MyBean的代码,

public class MyBean {

private Student first;

public Student getFirst() {

return first;

}

public void setFirst(Student first) {

this.first = first;

}

使用toBean()方法是传入了三个参数,第一个是JSONObject对象,第二个是MyBean.class,第三个是一个Map对象。通过MyBean可以知道此类中要有一个first的属性,且其类型为Student,要和map中的键和值类型对应,即,first对应键 first类型对应值的类型。

以上是小弟自己总结出来的有不足的地方欢迎吐槽!学如逆水行舟不进则退!!!与君共勉!

 

 

转载于:https://www.cnblogs.com/ysySelf/p/10208823.html

JSON数据格式转换(StringBuffer拼接json串)大全及用法相关推荐

  1. Python中json数据格式转换

    json数据格式(良好的中转数据格式) JSON是一种轻量级的数据交互格式.可以按照JSON指定的格式去组织和封装数据 JSON本质上是一种带有特定格式的字符串 **JSON的主要功能:**json就 ...

  2. JSON数据格式的基本使用-JSON序列化

    文章目录 1.JSON的由来 2.JSON基本语法 3. JSON序列化 4.Stringify方法的补充 4.1 replace参数 4.2 space参数 5.parse方法的补充 1.JSON的 ...

  3. python中字符串和json的转换,Python笔记——json和字符串之间的相互转换

    json和字符串之间的转换,主要使用到json库中的json.loads()函数json.dumps()含函数. 所以我们首先要导入json库. import json 一.字符串转为json,使用 ...

  4. java数据文本格式转换_SpringMVC中Json数据格式转换

    1  @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为js ...

  5. mysql json php 直接使用_PHP面试题大全(值得收藏)

    php中文网最新课程 每日17点准时技术干货分享 相关推荐:<2019年PHP面试题大汇总(收藏)> 一 .PHP基础部分 1.PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环 ...

  6. java 泛型集合 json_将泛型集合转换成分页json数据

    [java]代码库package com.sunweb.util.jsonfactory; import java.util.List; import com.sunweb.util.jsonfact ...

  7. 后台怎么接收处理从url 客户端传来的json数据格式

    最近做项目用到了 一个新的客户端传参的方式,主要采用的是客户端以json数据格式的方式想后台传递数据,所以,后台接收的参数也是json格式的,刚开始不知道怎么做, 到最后才找到了解决的办法就是利用go ...

  8. JSON数据格式超全总结

    ** JSON数据格式超全总结** 1.JSON数据格式概念 JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么JSON是什么呢? JSON其实是一种轻量级的数 ...

  9. 2020-08-22 SpringMVC中Json使用、后端返回给前端的JSON对象乱码问题、前台对Json数据格式的操作、Jackson以及FastJson使用

    json的使用 我们广义上说的后端开发提供接口,其实指的是我们在Controller层定义的域名:端口号/请求名 前端获取这个请求,去赋给比如表单的action,获取相应的结果集并展示. json:轻 ...

最新文章

  1. android 常用 style,Android中 Styles和Themes
  2. java异常 字节码,Java字节码角度分析异常处理
  3. 【CodeForces - 599C 】Day at the Beach(思维)
  4. 上传SVN丢失.a文件的问题
  5. usb连接不上 艾德克斯电源_工程师,USB与SPI之间如何通信?什么芯片方案可以实现...
  6. stm32时钟树_STM32中的时钟
  7. 大型网站技术架构(五)网站高可用架构
  8. c#: using Microsoft.Office.Interop.Excel 异常
  9. 使用expect编写脚本
  10. 搜索文件夹中word文档中的关键字
  11. app小窗口悬浮工具_app小窗口悬浮工具_侧边栏 app小窗口悬浮工具
  12. 【保姆级教程】STK3332系列环境光传感器整理!STK333X
  13. CSDN富文本编辑器去除空行
  14. python对压缩包简单加密_简单文件压缩加密脚本 python
  15. 5000人小程序 服务器,微信公开课憋了哪些大招?放开5000好友限制,小程序超8000亿规模...
  16. EIDcenter 与金山毒霸设计软件视觉包装
  17. 将fluent的h5文件导入tecplot的方法
  18. 格兰杰检验的基本步骤_如何在STATA中做格兰杰因果关系检验
  19. Ural1136-Parliament
  20. UEBA技术在ADAudit Plus中的应用

热门文章

  1. 拉普拉斯算子_图机器学习图拉普拉斯算子的离散正则性,141页ppt,Discrete regularity graph Laplacians...
  2. exe软件打包工具哪个好_小视频制作软件哪个好?推荐五款超赞小视频制作工具...
  3. CSS基础-行高(height和line-height)【学习笔记】
  4. WebDriver API学习记录
  5. git21天打卡Day1-linux下安装git
  6. SVN学习2020.8.9
  7. 人生难免有失意,还是个小姑娘的她...成功的转行测试岗拿到18k offer
  8. 辞职腾讯去了小公司,从0到1搭建后端架构,工资就翻倍了
  9. 匹配左括号或者右括号js_九章算法 | 蚂蚁金服面试题:有效的括号字符串
  10. php 零宽断言,正则表达式之零宽断言