Java fastjson的json转化


FastJSON 和 FastJSON2 都是由阿里巴巴开源的用于处理 JSON 数据的 Java 库。
FastJSON2 是在 FastJSON 基础上重写的版本,解决原版 FastJSON 中的一些缺陷以及安全问题,在性能和功能方面也有所增强。

<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.55</version>
</dependency>

JSONObject

1、json格式的字符串转JSON对象

带转义和引号的字符串转换:

String jsonStr="{\"name\":\"zhangsan\",\"age\":\"123\"}";
JSONObject jsonObject=JSONObject.parseObject(jsonStr);

不带转义和引号的字符串转换:

//不带转义的json格式字符串转换{success=0, msgid=1000001, msg=appkey错误或不存在}
 String str="{success=0, msgid=1000001, msg=appkey错误或不存在}";
 
 String input = StringUtils.substringBetween(str, "{", "}");             // substringBetween 截取两个标签之间的文本  input="success=0, msgid=1000001, msg=appkey错误或不存在"
 
 Map<String, String> map = Splitter.on(",").withKeyValueSeparator("=").split(input);     // 指定以,为连接的input字符串,withKeyValueSeparator 指定键值对中的分隔符

 System.out.println(JSON.toJSONString(map));     // {"success":"0"," msgid":"1000001"," msg":"appkey错误或不存在"}

不带引号的字符串,需要用到guava分割后转:https://blog.youkuaiyun.com/chinabestchina/article/details/89290494

2、通过key获取JSON对象的值

JSONObject jsonObject=JSONObject.parseObject(jsonStr);
//获取key为name的值
String name=jsonObject.get("name");

3、JSON对象转某个对象

JSON格式字符串转为实体对象

jsonStr为JSON格式字符串,Employee 为要转为的对象

String jsonStr= "{\"name\":\"张三\",\"age\":18}";
Employee emp=JSONObject.parseObject(jsonStr, Employee.class);

这个方法会出现一个问题,某些值会丢失。
替代方法,先转为Map,然后直接通过get取值

Map<String, Object> map = JSON.parseObject(json, Map.class);
map.get("name");

JSONObject转为实体对象

String jsonString = "{\"name\":\"张三\",\"age\":18}";
//JSON格式字符串转为JSONObject 
JSONObject jsonObject = JSONObject.parseObject(jsonString);	
//JSONObject转为实体对象
User user = jsonObject.toJavaObject(User.class);

4、对象转JSON

JSONObject json=(JSONObject) JSONObject.toJSON(res);

5、List转JSON

List<User> users= new ArrayList<>();
for (int i=1;i<=100;i++){
    User user=new User();
    user.setUserName("张"+i);
    user.setPassWord("pwd"+i);
    users.add(user);	
}
String strs= JSON.toJSONString(users);

6、Map和JSON转换

6.1 、Map转JSON

        Map<String,String> map = new HashMap<String,String>();
        map.put("name","zhangsan");
        map.put("age","123");
        map.put("sex","1");
        String json=JSON.toJSONString(map);     //map先转string
        JSONObject jsonObject = JSONObject.parseObject(json);       //string再转JSONObject
        System.out.println(jsonObject);     //  {"sex":"1","name":"zhangsan","age":"123"}

或者直接

        Map<String,String> map = new HashMap<String,String>();
        map.put("name","zhangsan");
        map.put("age","123");
        map.put("sex","1");
        JSONObject jsonObject = new JSONObject(map);  
        System.out.println(jsonObject);     //  {"sex":"1","name":"zhangsan","age":"123"}

6.2 、JSON转Map

	 Map map1=JSON.parseObject(JSON.toJSONString(jsonObject));       //json先转string,再转Map

    map1.forEach((k,v)->{
        System.out.println(k+":"+v);
    });

new ObjectMapper()转对象为JSON格式字符串

        User user = new User("张三", 20);
        String jsonUser = new ObjectMapper().writeValueAsString(user);
        System.out.println(jsonUser);

在这里插入图片描述

toString后多了斜杠\

使用JSONObject的toString时,多了斜杠\,直接使用JSONObject.parse转一下,
在这里插入图片描述
使用JSONObject.parse
在这里插入图片描述

JSONArray

JSONArray转LIST

List<User> users = user.toJavaList(User.class);

List转JSONArray

//list先转JSON,再通过JSONArray的parseArray转成JSONArray
JSONArray.parseArray(JSON.toJSONString(list))

String转JSONArray

//providers="[{"bdid":"4ee415092e1344a18e1864b2fe8ebbe0","winId":"e8b40032886a4e7a8ae33c7f17343e99","remark":""},{"bdid":"840df7c0b9114bc3b17359e69b91a661","winId":"9e600a6dc0604909a943946b3ca7c278","remark":""}]"
JSONArray jsonArray = JSONArray.parseArray(providers);

JSONArray转String

//	seal2=[11,12,13]
   JSONArray seal2 = (JSONArray) map.get("seal2");

        System.out.println(seal2.toString());
        //或者直接toString
        System.out.println(map.get("seal"+i).toString());

在这里插入图片描述

其它

JSON格式的字符串转Map

//String sealStr={"seal0":["1"],"seal1":["4","5"],"seal2":["11","12","13"]}
        Map map= (Map) JSON.parse(sealStr);

        map.forEach((k,v)->{
            System.out.println(k+"--------------------"+v);

        });

在这里插入图片描述

JSONObject.parseObject和jsonObject.toJavaObject

它们都可以将json格式字符串转为实体对象,他们的区别是parseObject直接可以将json格式字符串转为实体对象,而toJavaObject需要先将json格式字符串转为JSONObject,然后再toJavaObject转为实体对象

JSONObject.parseObject

String jsonStr= "{\"name\":\"张三\",\"age\":18}";
Employee emp=JSONObject.parseObject(jsonStr, Employee.class);

JSONObject.toJavaObject

String jsonString = "{\"name\":\"张三\",\"age\":18}";
//JSON格式字符串转为JSONObject 
JSONObject jsonObject = JSONObject.parseObject(jsonString);	
//JSONObject转为实体对象
User user = jsonObject.toJavaObject(User.class);

HashMap转对象

数据结构
在这里插入图片描述
转换后的对象
在这里插入图片描述

	//先获取hashmap对象
        Object loginUser = RpcContext.getContext().getObjectAttachment("loginUser");
	//转成字符串
        String jsonString = JSON.toJSONString(loginUser);
        //转成对象
        LoginUser user = JSON.parseObject(jsonString, LoginUser.class);
Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值