首页 > 编程知识 正文

springboot中json对象,springboot 获取原生的json字符串

时间:2023-05-05 04:16:48 阅读:256425 作者:4450

文章目录 前言一、测试前准备1. maven依赖2. User类(Java对象) 二、JSON的互相转换1. Java 对象转换到 Json对象2. json 字符串转换成Json 对象3. Json字符串转换至Java对象4. map 集合转换为 Json 对象5. 遍历JSONArray 三、JSON的其他问题1. JSON作为Get请求方法的参数

前言

做项目的时候,遇到了好多关于Json转化的问题,比如

java 对象、Json 字符串 与 Json对象的互相转化Json 对象做Get请求参数的编码问题

等等,以后再遇到什么问题,我再继续补充,实时更新。。。
原来每次遇到都要现找资料,这次做个笔记,总结一下。
我以springboot项目进行测试。

一、测试前准备 1. maven依赖 <!--fastjson--><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.12</version> </dependency><!--junit 测试单元--><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version></dependency> 2. User类(Java对象)

我这里使用的 lombok插件

package com.feng.bean;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;@Data@NoArgsConstructor@AllArgsConstructorpublic class User implements Serializable { private String name; private String address; private String passwd;} 二、JSON的互相转换 1. Java 对象转换到 Json对象

java 对象转化至Json对象,需两步:

将java对象转换至Json字符串将Json字符串转换至 Json 对象 package com.feng.json;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.feng.bean.User;import org.junit.Test;public class JsonTest { @Test public void javaobjToJsonobj() { System.out.println("****************************** JavaBean 转成 Json对象 :4 个方法 ************************************"); User user = new User("feng", "济南", "123"); JSONObject o = (JSONObject) JSONArray.toJSON(user); System.out.println("方法1:java 对象通过 JSONArray.toJSON(user) 转换成 Json 对象(需强转)" + o); JSONObject o1 = (JSONObject) JSONObject.toJSON(user); System.out.println("方法2:java 对象通过 JSONObject.toJSON(user) 转换成 Json 对象(需强转)" + o1); JSONObject o2 = (JSONObject) JSON.toJSON(user); System.out.println("方法3:java 对象通过 JSON.toJSON(user) 转换成 Json 对象(需强转)" + o2); String s1 = JSON.toJSONString(user); System.out.println("方法4.1:对象JSON.toJSONString(user) 通过转成的 json字符串:" + s1); JSONObject jsonObject = JSONObject.parseObject(s1); System.out.println("方法4.2:json字符串通过 JSONObject.parseObject(s1) 转换成 json 对象:" + jsonObject); //JSONObject json1 = JSONObject.parseObject(user.toString()); // System.out.println("111:"+json1); /** * 会报错 syntax error, pos 1 语法错误。 * 将对象转成 json 对象 需要两步:1、对象转成 json 字符串,2、json 字符串转成 json 对象 * 这里user.toString() 仅将对象转成字符串 而不是 json 字符串 */ }}

结果:

2. json 字符串转换成Json 对象

方法都在同一个类

@Testpublic void jsonstrToJsonobj(){ System.out.println("****************************** Json字符串 转成 Json对象:两个方法 ************************************"); String s = "{"address":"济南","passwd":"123","name":"feng"}"; JSONObject json = JSONObject.parseObject(s); System.out.println("方法1:json字符串通过JSONObject.parseObject() 转成json对象:"+json); JSONObject parse = (JSONObject) JSONObject.parse(s); System.out.println("方法2:json字符串通过JSONObject.parse() 转成json对象(需要强转):"+parse);}


总结:

两个方法都可以,但是第二个方法需要强转。 3. Json字符串转换至Java对象 @Testpublic void jsonstrToUserobj(){ System.out.println("****************************** Json字符串 转成 Java对象:两个方法 ************************************"); String s1 = "{"address":"济南","passwd":"123","name":"feng"}"; System.out.println("Json 字符串为:"+s1); User user = JSONObject.parseObject(s1, User.class); System.out.println("json字符串通过 转换至java对象:"+user.toString());}

4. map 集合转换为 Json 对象 @Test public void mapToJsonobj(){ System.out.println("****************************** map 集合转换为 Json 对象 ************************************"); Map<String, Object> map = new HashMap<>(); map.put("1","feng"); map.put("2",23); map.put("3","济南"); System.out.println("map 集合通过 map.toString() 转换成 字符串:"+map.toString()); JSONObject jsonObject = (JSONObject) JSONObject.toJSON(map); System.out.println("map 集合通过 JSONObject.toJSON(map) 转换成 Json对象(需强转):"+jsonObject); }

5. 遍历JSONArray @Test public void readJsonarray() { String strData = "[{"name":"zhangsan"},{"name":"fenganchen"}]"; JSONArray jsons = JSONArray.parseArray(strData); // 首先把字符串转成 JSONArray 对象 System.out.println("方法 1:直接使用for 循环的遍历"); if (jsons.size() > 0) { for (int i = 0; i < jsons.size(); i++) { JSONObject job = jsons.getJSONObject(i); // 遍历 jsonarray 数组,把每一个对象转成 json 对象 System.out.println(job.get("name")); // 得到 每个对象中的属性值 } } System.out.println("方法 2:for循环遍历的技巧"); if (jsons.size() > 0) { for (Iterator tor = jsons.iterator(); tor.hasNext(); ) { JSONObject job = (JSONObject) tor.next(); System.out.println(job.get("name")); } } }

三、JSON的其他问题 1. JSON作为Get请求方法的参数

问题描述:

java.net.URISyntaxException: Illegal character in query at index 46// 即:java.net.urisyntaxception:索引46处的查询中存在非法字符

我再微服务中底层发送一个get请求,请求参数为json,url为:String url111 = url+"?Condition="+json。
但是报错了。纠结。

搞了一上午,查阅资料发现。传参时,不能有特殊字符,如:{、/、||等等。
当然我这里也没有,但是json中的 { [, 等 就不行,因此需要转码。
Java jdk 有自带的方法,我直接放上:
解决方法:

java中转码:String encode = URLEncoder.encode(JSONObject.toJSONString(json),"UTF-8")js中转码:var str = encodeURI(JSON.stringify(json),'utf-8')

则请求可使用了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。